[clang-format] Fix a bug in AnnotatingParser::rParenEndsCast() (#79549)
authorOwen Pan <owenpiano@gmail.com>
Sat, 27 Jan 2024 02:32:03 +0000 (18:32 -0800)
committerTom Stellard <tstellar@redhat.com>
Wed, 7 Feb 2024 05:26:58 +0000 (21:26 -0800)
Fixes #78965.

(cherry picked from commit f826f55b2ab68c2515fae751dc2d6ef77f37b172)

clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp

index 3dbcb50c2e087c3aa282f123ee1886f04d8b0f6f..d0c4273cfc7e5836127735368a500a5386b93dc2 100644 (file)
@@ -2488,6 +2488,8 @@ private:
         (Tok.Next->Next->is(tok::numeric_constant) || Line.InPPDirective)) {
       return false;
     }
+    if (Line.InPPDirective && Tok.Next->is(tok::minus))
+      return false;
     // Search for unexpected tokens.
     for (FormatToken *Prev = Tok.Previous; Prev != Tok.MatchingParen;
          Prev = Prev->Previous) {
index 3dbf504c35ed55ef00a027a98601abb53b45bd0b..67678c18963b1f306db263cd4c22b2c0734b7fae 100644 (file)
@@ -611,6 +611,11 @@ TEST_F(TokenAnnotatorTest, UnderstandsCasts) {
   EXPECT_TOKEN(Tokens[13], tok::r_paren, TT_Unknown);
   EXPECT_TOKEN(Tokens[14], tok::star, TT_BinaryOperator);
 
+  Tokens = annotate("#define foo(i) ((i) - bar)");
+  ASSERT_EQ(Tokens.size(), 14u) << Tokens;
+  EXPECT_TOKEN(Tokens[9], tok::r_paren, TT_Unknown);
+  EXPECT_TOKEN(Tokens[10], tok::minus, TT_BinaryOperator);
+
   Tokens = annotate("return (Foo) & 10;");
   ASSERT_EQ(Tokens.size(), 8u) << Tokens;
   EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_Unknown);