Author: arphaman Date: Thu Sep 19 15:39:24 2019 New Revision: 372360 URL: http://llvm.org/viewvc/llvm-project?rev=372360&view=rev Log: 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 Modified: cfe/trunk/lib/Lex/DependencyDirectivesSourceMinimizer.cpp cfe/trunk/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp Modified: cfe/trunk/lib/Lex/DependencyDirectivesSourceMinimizer.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/DependencyDirectivesSourceMinimizer.cpp?rev=372360&r1=372359&r2=372360&view=diff ============================================================================== --- cfe/trunk/lib/Lex/DependencyDirectivesSourceMinimizer.cpp (original) +++ cfe/trunk/lib/Lex/DependencyDirectivesSourceMinimizer.cpp Thu Sep 19 15:39:24 2019 @@ -246,9 +246,12 @@ static void skipToNewlineRaw(const char 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) { Modified: cfe/trunk/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp?rev=372360&r1=372359&r2=372360&view=diff ============================================================================== --- cfe/trunk/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp (original) +++ cfe/trunk/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp Thu Sep 19 15:39:24 2019 @@ -157,19 +157,19 @@ TEST(MinimizeSourceToDependencyDirective 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(MinimizeSourceToDependencyDirective " 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(MinimizeSourceToDependencyDirective " 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(MinimizeSourceToDependencyDirective " 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(MinimizeSourceToDependencyDirective " 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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits