[clang] [clang-format] Fix annotation of references in function pointer typedefs (PR #188860)
Björn Schäpers via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 28 08:32:30 PDT 2026
https://github.com/HazardyKnusperkeks updated https://github.com/llvm/llvm-project/pull/188860
>From 429751f9a065fd8799b65046c652b3cce2df66db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= <bjoern at hazardy.de>
Date: Thu, 26 Mar 2026 23:09:48 +0100
Subject: [PATCH 1/3] [clang-format] Fix annotation of references in function
pointer typedefs
Fixes #188695
---
clang/lib/Format/TokenAnnotator.cpp | 2 +-
clang/unittests/Format/TokenAnnotatorTest.cpp | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index d2cdc28a7da7b..21fa8481518b0 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -2758,7 +2758,7 @@ class AnnotatingParser {
if (BeforeRParen == LParen || !AfterRParen)
return false;
- if (LParen->is(TT_OverloadedOperatorLParen))
+ if (LParen->isOneOf(TT_OverloadedOperatorLParen, TT_FunctionTypeLParen))
return false;
auto *LeftOfParens = LParen->getPreviousNonComment();
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index efb361387bb1e..c103c4f1bdd61 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -427,6 +427,14 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) {
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
EXPECT_TOKEN(Tokens[1], tok::star, TT_PointerOrReference);
EXPECT_TOKEN(Tokens[3], tok::star, TT_PointerOrReference);
+
+ Tokens = annotate("using f = A *(*)(B &c);");
+ ASSERT_EQ(Tokens.size(), 15u);
+ EXPECT_TOKEN(Tokens[4], tok::star, TT_PointerOrReference);
+ EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_FunctionTypeLParen);
+ EXPECT_TOKEN(Tokens[6], tok::star, TT_PointerOrReference);
+ EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_Unknown); // Not TT_CastRParen
+ EXPECT_TOKEN(Tokens[10], tok::amp, TT_PointerOrReference);
}
TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
>From 82441fe65e0f9b83ded1b6e4216c2776b02e12e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= <bjoern at hazardy.de>
Date: Fri, 27 Mar 2026 21:00:23 +0100
Subject: [PATCH 2/3] Feedback
---
clang/unittests/Format/TokenAnnotatorTest.cpp | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index c103c4f1bdd61..920d27805adf7 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -428,13 +428,10 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) {
EXPECT_TOKEN(Tokens[1], tok::star, TT_PointerOrReference);
EXPECT_TOKEN(Tokens[3], tok::star, TT_PointerOrReference);
- Tokens = annotate("using f = A *(*)(B &c);");
- ASSERT_EQ(Tokens.size(), 15u);
- EXPECT_TOKEN(Tokens[4], tok::star, TT_PointerOrReference);
- EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_FunctionTypeLParen);
- EXPECT_TOKEN(Tokens[6], tok::star, TT_PointerOrReference);
- EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_Unknown); // Not TT_CastRParen
- EXPECT_TOKEN(Tokens[10], tok::amp, TT_PointerOrReference);
+ Tokens = annotate("FuncPointerType = MCStreamer *(*)(MCContext &Ctx);");
+ ASSERT_EQ(Tokens.size(), 14u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_Unknown); // Not TT_CastRParen
+ EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
}
TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
>From b06a8263acdb9257548392578b2d35526a164c95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= <bjoern at hazardy.de>
Date: Sat, 28 Mar 2026 16:32:17 +0100
Subject: [PATCH 3/3] Review
---
clang/unittests/Format/TokenAnnotatorTest.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 920d27805adf7..98a2c80c5c820 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -432,6 +432,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) {
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_Unknown); // Not TT_CastRParen
EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
+ EXPECT_TOKEN(Tokens[10], tok::identifier, TT_StartOfName);
}
TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
More information about the cfe-commits
mailing list