[clang] 6af2c18 - [clang] fix regression parsing C enum which doesn't declare anything (#155904)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 28 11:59:21 PDT 2025
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}}
More information about the cfe-commits
mailing list