https://github.com/owenca created https://github.com/llvm/llvm-project/pull/72336
Fixed #72264. >From 832b6dccb1a8b0d3af4c3970c6c85f97e9cf3283 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Tue, 14 Nov 2023 19:21:11 -0800 Subject: [PATCH] [clang-format] Fix more bugs in isStartOfName() Fixed #72264. --- clang/lib/Format/TokenAnnotator.cpp | 7 ++----- clang/unittests/Format/TokenAnnotatorTest.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 03f3c3583f2ec44..b71f6daa4e14392 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2018,10 +2018,6 @@ class AnnotatingParser { (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) { Contexts.back().FirstStartOfName = &Current; Current.setType(TT_StartOfName); - if (auto *PrevNonComment = Current.getPreviousNonComment(); - PrevNonComment && PrevNonComment->is(TT_StartOfName)) { - PrevNonComment->setType(TT_Unknown); - } } else if (Current.is(tok::semi)) { // Reset FirstStartOfName after finding a semicolon so that a for loop // with multiple increment statements is not confused with a for loop @@ -2210,7 +2206,8 @@ class AnnotatingParser { return false; if (const auto *NextNonComment = Tok.getNextNonComment(); - !NextNonComment || NextNonComment->isPointerOrReference()) { + !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 ed730307074963f..1c0fe60c45c7a87 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -2373,6 +2373,20 @@ TEST_F(TokenAnnotatorTest, UnderstandsDoWhile) { EXPECT_TOKEN(Tokens[4], tok::kw_while, TT_DoWhile); } +TEST_F(TokenAnnotatorTest, NotStartOfName) { + auto Tokens = annotate("#pragma clang diagnostic push"); + 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_Unknown); + + Tokens = annotate("#pragma clang diagnostic ignored \"-Wzero-length-array\""); + ASSERT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::identifier, TT_Unknown); + EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); + EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); +} + } // namespace } // namespace format } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits