https://github.com/AmrDeveloper updated 
https://github.com/llvm/llvm-project/pull/187580

>From da373f81c433a2f1aa2f8908a4d7d5f5e9bb4f1f Mon Sep 17 00:00:00 2001
From: Amr Hesham <[email protected]>
Date: Thu, 19 Mar 2026 21:12:03 +0100
Subject: [PATCH] [Clang][Parser] Report error when attribute missing `]]`
 followed by `;;`

---
 clang/lib/Parse/ParseDeclCXX.cpp                  |  7 -------
 .../cxx-attributes-missing-closing-in-switch.cpp  | 15 +++++++++++++++
 .../Parser/cxx-attributes-missing-closing.cpp     |  5 +++++
 ...attributes-missing-with-semi-bfore-closing.cpp |  5 +++++
 4 files changed, 25 insertions(+), 7 deletions(-)
 create mode 100644 
clang/test/Parser/cxx-attributes-missing-closing-in-switch.cpp
 create mode 100644 clang/test/Parser/cxx-attributes-missing-closing.cpp
 create mode 100644 
clang/test/Parser/cxx-attributes-missing-with-semi-bfore-closing.cpp

diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 274c354d59808..c759d37815903 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -4681,13 +4681,6 @@ void 
Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs,
       Diag(Tok, diag::err_cxx11_attribute_forbids_ellipsis) << AttrName;
   }
 
-  // If we hit an error and recovered by parsing up to a semicolon, eat the
-  // semicolon and don't issue further diagnostics about missing brackets.
-  if (Tok.is(tok::semi)) {
-    ConsumeToken();
-    return;
-  }
-
   SourceLocation CloseLoc = Tok.getLocation();
   if (ExpectAndConsume(tok::r_square))
     SkipUntil(tok::r_square);
diff --git a/clang/test/Parser/cxx-attributes-missing-closing-in-switch.cpp 
b/clang/test/Parser/cxx-attributes-missing-closing-in-switch.cpp
new file mode 100644
index 0000000000000..55b7c0477d938
--- /dev/null
+++ b/clang/test/Parser/cxx-attributes-missing-closing-in-switch.cpp
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// expected-note@+1 {{to match this '{'}}
+void a(int i) {
+    switch(i) {
+        case 1:
+  // expected-error@+2 {{expected ']'}}
+  // expected-error@+3 {{expected ']'}}
+  [[fallthrough;;
+        case 2:
+        ;
+    };
+   // expected-error@+2 {{expected statement}}
+   // expected-error@+1 {{expected '}'}}
+}
diff --git a/clang/test/Parser/cxx-attributes-missing-closing.cpp 
b/clang/test/Parser/cxx-attributes-missing-closing.cpp
new file mode 100644
index 0000000000000..518dfe2a0a5dd
--- /dev/null
+++ b/clang/test/Parser/cxx-attributes-missing-closing.cpp
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// expected-error@+2 2 {{expected ']'}}
+// expected-error@+1 {{expected external declaration}}
+[[assume0;;
\ No newline at end of file
diff --git 
a/clang/test/Parser/cxx-attributes-missing-with-semi-bfore-closing.cpp 
b/clang/test/Parser/cxx-attributes-missing-with-semi-bfore-closing.cpp
new file mode 100644
index 0000000000000..064b548bffbbc
--- /dev/null
+++ b/clang/test/Parser/cxx-attributes-missing-with-semi-bfore-closing.cpp
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// expected-error@+2 {{expected ']'}}
+// expected-error@+1 {{expected external declaration}}
+[[fallthrough;]]
\ No newline at end of file

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to