[clang] [clang-format] Fix more bugs in isStartOfName() (PR #72336)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 14 19:26:57 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: Owen Pan (owenca)
<details>
<summary>Changes</summary>
Fixed #<!-- -->72264.
---
Full diff: https://github.com/llvm/llvm-project/pull/72336.diff
2 Files Affected:
- (modified) clang/lib/Format/TokenAnnotator.cpp (+2-5)
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+14)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/72336
More information about the cfe-commits
mailing list