Author: Owen Pan Date: 2023-11-19T15:08:54-08:00 New Revision: cb3a605c5d453f9c6af8c44f84a11815aed7fe85
URL: https://github.com/llvm/llvm-project/commit/cb3a605c5d453f9c6af8c44f84a11815aed7fe85 DIFF: https://github.com/llvm/llvm-project/commit/cb3a605c5d453f9c6af8c44f84a11815aed7fe85.diff LOG: [clang-format] Fix a bug in isStartOfName() on macro definitions (#72768) Fixed #72751. Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 1cc198ceec708d7..06775b6df945887 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2206,8 +2206,10 @@ class AnnotatingParser { return false; if (const auto *NextNonComment = Tok.getNextNonComment(); - !NextNonComment || NextNonComment->isPointerOrReference() || - NextNonComment->isOneOf(tok::identifier, tok::string_literal)) { + (!NextNonComment && !Line.InMacroBody) || + (NextNonComment && + (NextNonComment->isPointerOrReference() || + NextNonComment->isOneOf(tok::identifier, tok::string_literal)))) { return false; } diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index a986806b7a44069..b6abf34c589b146 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -2390,7 +2390,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsDoWhile) { EXPECT_TOKEN(Tokens[4], tok::kw_while, TT_DoWhile); } -TEST_F(TokenAnnotatorTest, NotStartOfName) { +TEST_F(TokenAnnotatorTest, StartOfName) { auto Tokens = annotate("#pragma clang diagnostic push"); ASSERT_EQ(Tokens.size(), 6u) << Tokens; EXPECT_TOKEN(Tokens[2], tok::identifier, TT_Unknown); @@ -2402,6 +2402,12 @@ TEST_F(TokenAnnotatorTest, NotStartOfName) { EXPECT_TOKEN(Tokens[2], tok::identifier, TT_Unknown); EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); + + Tokens = annotate("#define FOO Foo foo"); + ASSERT_EQ(Tokens.size(), 6u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::identifier, TT_Unknown); + EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); + EXPECT_TOKEN(Tokens[4], tok::identifier, TT_StartOfName); } } // namespace _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits