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
