https://github.com/owenca created https://github.com/llvm/llvm-project/pull/142110
Fix #142050 >From 9cf70104e03372be9122d44a87694cd04b9b34c9 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Fri, 30 May 2025 01:52:31 -0700 Subject: [PATCH] [clang-format] Handle bit-field colon of non-numeric-constant size Fix #142050 --- clang/lib/Format/TokenAnnotator.cpp | 4 +++- clang/unittests/Format/TokenAnnotatorTest.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 51ececc0c0e81..f8272811bbe6c 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1411,7 +1411,9 @@ class AnnotatingParser { assert(Prev); if (Prev->isPointerOrReference()) Prev->setFinalizedType(TT_PointerOrReference); - } else if (CurrentToken && CurrentToken->is(tok::numeric_constant)) { + } else if ((CurrentToken && CurrentToken->is(tok::numeric_constant)) || + (Prev && Prev->is(TT_StartOfName) && !Scopes.empty() && + Scopes.back() == ST_Class)) { Tok->setType(TT_BitFieldColon); } else if (Contexts.size() == 1 && !Line.getFirstNonComment()->isOneOf(tok::kw_enum, tok::kw_case, diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index f39468424a393..1a5ed4b9040c2 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -4076,6 +4076,14 @@ TEST_F(TokenAnnotatorTest, EnumColonInTypedef) { EXPECT_TOKEN(Tokens[2], tok::colon, TT_Unknown); // Not TT_InheritanceColon. } +TEST_F(TokenAnnotatorTest, BitFieldColon) { + auto Tokens = annotate("class C {\n" + " int f : SIZE;\n" + "};"); + ASSERT_EQ(Tokens.size(), 11u) << Tokens; + EXPECT_TOKEN(Tokens[5], tok::colon, TT_BitFieldColon); +} + } // namespace } // namespace format } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits