forked from OSchip/llvm-project
Fix for stringized function-macro args continued across lines
In case of certain #define'd macros, there's a space just before line continuation that the minimized-source lexer was missing to include, resulting in invalid stringize. Patch by: kousikk (Kousik Kumar) Differential Revision: https://reviews.llvm.org/D67635 llvm-svn: 372360
This commit is contained in:
parent
40c3d6e335
commit
ccf8d5b829
|
@ -246,9 +246,12 @@ static void skipToNewlineRaw(const char *&First, const char *const End) {
|
|||
|
||||
static const char *reverseOverSpaces(const char *First, const char *Last) {
|
||||
assert(First <= Last);
|
||||
while (First != Last && isHorizontalWhitespace(Last[-1]))
|
||||
const char *PrevLast = Last;
|
||||
while (First != Last && isHorizontalWhitespace(Last[-1])) {
|
||||
PrevLast = Last;
|
||||
--Last;
|
||||
return Last;
|
||||
}
|
||||
return PrevLast;
|
||||
}
|
||||
|
||||
static void skipLineComment(const char *&First, const char *const End) {
|
||||
|
|
|
@ -157,19 +157,19 @@ TEST(MinimizeSourceToDependencyDirectivesTest, DefineHorizontalWhitespace) {
|
|||
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(
|
||||
"#define MACRO(\t)\tcon \t tent\t", Out));
|
||||
EXPECT_STREQ("#define MACRO() con \t tent\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO() con \t tent\t\n", Out.data());
|
||||
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(
|
||||
"#define MACRO(\f)\fcon \f tent\f", Out));
|
||||
EXPECT_STREQ("#define MACRO() con \f tent\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO() con \f tent\f\n", Out.data());
|
||||
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(
|
||||
"#define MACRO(\v)\vcon \v tent\v", Out));
|
||||
EXPECT_STREQ("#define MACRO() con \v tent\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO() con \v tent\v\n", Out.data());
|
||||
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives(
|
||||
"#define MACRO \t\v\f\v\t con\f\t\vtent\v\f \v", Out));
|
||||
EXPECT_STREQ("#define MACRO con\f\t\vtent\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO con\f\t\vtent\v\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, DefineMultilineArgs) {
|
||||
|
@ -187,7 +187,7 @@ TEST(MinimizeSourceToDependencyDirectivesTest, DefineMultilineArgs) {
|
|||
" call((a), \\\n"
|
||||
" (b))",
|
||||
Out));
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a),(b))\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a), (b))\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest,
|
||||
|
@ -200,7 +200,17 @@ TEST(MinimizeSourceToDependencyDirectivesTest,
|
|||
" call((a), \\\r"
|
||||
" (b))",
|
||||
Out));
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a),(b))\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a), (b))\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, DefineMultilineArgsStringize) {
|
||||
SmallVector<char, 128> Out;
|
||||
|
||||
ASSERT_FALSE(minimizeSourceToDependencyDirectives("#define MACRO(a,b) \\\n"
|
||||
" #a \\\n"
|
||||
" #b",
|
||||
Out));
|
||||
EXPECT_STREQ("#define MACRO(a,b) #a #b\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest,
|
||||
|
@ -213,7 +223,7 @@ TEST(MinimizeSourceToDependencyDirectivesTest,
|
|||
" call((a), \\\r\n"
|
||||
" (b))",
|
||||
Out));
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a),(b))\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a), (b))\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest,
|
||||
|
@ -226,7 +236,7 @@ TEST(MinimizeSourceToDependencyDirectivesTest,
|
|||
" call((a), \\\n\r"
|
||||
" (b))",
|
||||
Out));
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a),(b))\n", Out.data());
|
||||
EXPECT_STREQ("#define MACRO(a,b) call((a), (b))\n", Out.data());
|
||||
}
|
||||
|
||||
TEST(MinimizeSourceToDependencyDirectivesTest, DefineNumber) {
|
||||
|
|
Loading…
Reference in New Issue