mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-13 03:12:46 +00:00
[clang-scan-deps] Dependency directives source minimizer:
single quotes are not digit separators after a valid character literal prefix The single quote character can act as a c++ digit separator. However, the minimizer shouldn't treat it as such when it's actually following a valid character literal prefix, like L, U, u, or u8. Differential Revision: https://reviews.llvm.org/D64525 llvm-svn: 365700
This commit is contained in:
parent
d7aae33a95
commit
9a6c17b5b8
@ -262,7 +262,14 @@ static bool isQuoteCppDigitSeparator(const char *const Start,
|
||||
if (Start == Cur)
|
||||
return false;
|
||||
// The previous character must be a valid PP number character.
|
||||
if (!isPreprocessingNumberBody(*(Cur - 1)))
|
||||
// Make sure that the L, u, U, u8 prefixes don't get marked as a
|
||||
// separator though.
|
||||
char Prev = *(Cur - 1);
|
||||
if (Prev == 'L' || Prev == 'U' || Prev == 'u')
|
||||
return false;
|
||||
if (Prev == '8' && (Cur - 1 != Start) && *(Cur - 2) == 'u')
|
||||
return false;
|
||||
if (!isPreprocessingNumberBody(Prev))
|
||||
return false;
|
||||
// The next character should be a valid identifier body character.
|
||||
return (Cur + 1) < End && isIdentifierBody(*(Cur + 1));
|
||||
|
@ -507,4 +507,41 @@ int c = 12 ' ';
|
||||
EXPECT_STREQ("#include <bob>\n#include <foo>\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, CharacterLiteralPrefixL) {
|
||||
SmallVector<char, 128> Out;
|
||||
|
||||
StringRef Source = R"(L'P'
|
||||
#if DEBUG
|
||||
// '
|
||||
#endif
|
||||
#include <test.h>
|
||||
)";
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out));
|
||||
EXPECT_STREQ("#include <test.h>\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, CharacterLiteralPrefixU) {
|
||||
SmallVector<char, 128> Out;
|
||||
|
||||
StringRef Source = R"(int x = U'P';
|
||||
#include <test.h>
|
||||
// '
|
||||
)";
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out));
|
||||
EXPECT_STREQ("#include <test.h>\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, CharacterLiteralPrefixu) {
|
||||
SmallVector<char, 128> Out;
|
||||
|
||||
StringRef Source = R"(int x = u'b';
|
||||
int y = u8'a';
|
||||
int z = 128'78;
|
||||
#include <test.h>
|
||||
// '
|
||||
)";
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out));
|
||||
EXPECT_STREQ("#include <test.h>\n", Out.data());
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
Loading…
x
Reference in New Issue
Block a user