Author: Matheus Izvekov
Date: 2025-08-28T18:59:16Z
New Revision: 6af2c18fef664eec24ed490590735205aac538b3

URL: 
https://github.com/llvm/llvm-project/commit/6af2c18fef664eec24ed490590735205aac538b3
DIFF: 
https://github.com/llvm/llvm-project/commit/6af2c18fef664eec24ed490590735205aac538b3.diff

LOG: [clang] fix regression parsing C enum which doesn't declare anything 
(#155904)

The regression was introduced in #155313

Since this regression was never released, there are no release notes.

Fixes #155794

Added: 
    clang/test/Sema/GH155794.c

Modified: 
    clang/lib/Sema/SemaDecl.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 73f92f7ec9a1e..0afef106821d9 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -5291,10 +5291,8 @@ Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, 
AccessSpecifier AS,
     //   UNION_TYPE;   <- where UNION_TYPE is a typedef union.
     if ((Tag && Tag->getDeclName()) ||
         DS.getTypeSpecType() == DeclSpec::TST_typename) {
-      RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag);
-      if (!Record)
-        Record = DS.getRepAsType().get()->getAsRecordDecl();
-
+      RecordDecl *Record = Tag ? dyn_cast<RecordDecl>(Tag)
+                               : DS.getRepAsType().get()->getAsRecordDecl();
       if (Record && getLangOpts().MicrosoftExt) {
         Diag(DS.getBeginLoc(), diag::ext_ms_anonymous_record)
             << Record->isUnion() << DS.getSourceRange();

diff  --git a/clang/test/Sema/GH155794.c b/clang/test/Sema/GH155794.c
new file mode 100644
index 0000000000000..1afbefaaae21a
--- /dev/null
+++ b/clang/test/Sema/GH155794.c
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wno-everything %s
+
+struct S {
+  enum e1 {} // expected-error {{use of empty enum}} expected-error {{expected 
';' after enum}}
+  enum e2 {} // expected-error {{use of empty enum}}
+}; // expected-error {{expected member name or ';' after declaration 
specifiers}}


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to