llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-format Author: Owen Pan (owenca) <details> <summary>Changes</summary> Fixes #<!-- -->145388 --- Full diff: https://github.com/llvm/llvm-project/pull/145468.diff 2 Files Affected: - (modified) clang/lib/Format/QualifierAlignmentFixer.cpp (+18-7) - (modified) clang/unittests/Format/QualifierFixerTest.cpp (+5-2) ``````````diff diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp index 8e55d339b2388..b0dda65adfba1 100644 --- a/clang/lib/Format/QualifierAlignmentFixer.cpp +++ b/clang/lib/Format/QualifierAlignmentFixer.cpp @@ -635,15 +635,26 @@ bool isConfiguredQualifierOrType(const FormatToken *Tok, // If a token is an identifier and it's upper case, it could // be a macro and hence we need to be able to ignore it. bool isPossibleMacro(const FormatToken *Tok) { - if (!Tok) - return false; + assert(Tok); if (Tok->isNot(tok::identifier)) return false; - if (Tok->TokenText.upper() == Tok->TokenText.str()) { - // T,K,U,V likely could be template arguments - return Tok->TokenText.size() != 1; - } - return false; + + const auto Text = Tok->TokenText; + assert(Text.size() > 0); + + // T,K,U,V likely could be template arguments + if (Text.size() == 1) + return false; + + // It's unlikely that qualified names are object-like macros. + const auto *Prev = Tok->getPreviousNonComment(); + if (Prev && Prev->is(tok::coloncolon)) + return false; + const auto *Next = Tok->getNextNonComment(); + if (Next && Next->is(tok::coloncolon)) + return false; + + return Text == Text.upper(); } } // namespace format diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp index 3eae39f267c3e..f42f2e307f713 100644 --- a/clang/unittests/Format/QualifierFixerTest.cpp +++ b/clang/unittests/Format/QualifierFixerTest.cpp @@ -1122,14 +1122,17 @@ TEST_F(QualifierFixerTest, IsQualifierType) { } TEST_F(QualifierFixerTest, IsMacro) { - auto Tokens = annotate("INT INTPR Foo int"); ASSERT_EQ(Tokens.size(), 5u) << Tokens; - EXPECT_TRUE(isPossibleMacro(Tokens[0])); EXPECT_TRUE(isPossibleMacro(Tokens[1])); EXPECT_FALSE(isPossibleMacro(Tokens[2])); EXPECT_FALSE(isPossibleMacro(Tokens[3])); + + Tokens = annotate("FOO::BAR"); + ASSERT_EQ(Tokens.size(), 4u) << Tokens; + EXPECT_FALSE(isPossibleMacro(Tokens[0])); + EXPECT_FALSE(isPossibleMacro(Tokens[2])); } TEST_F(QualifierFixerTest, OverlappingQualifier) { `````````` </details> https://github.com/llvm/llvm-project/pull/145468 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits