-
Notifications
You must be signed in to change notification settings - Fork 10.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[diag] Silence -Wfixed-enum-extension
in C23
#68060
Conversation
The C23 standard supports enums with fixed underlying types (N3030 [1]), so we shouldn't emit `-Wfixed-enum-extension` in C23 mode (since it's no longer a Clang extension at that point). [1] https://thephd.dev/_vendor/future_cxx/papers/C%20-%20Enhanced%20Enumerations.html
@llvm/pr-subscribers-clang ChangesThe C23 standard supports enums with fixed underlying types (N3030 [1]), [1] https://thephd.dev/_vendor/future_cxx/papers/C%20-%20Enhanced%20Enumerations.html Full diff: https://github.com/llvm/llvm-project/pull/68060.diff 2 Files Affected:
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index a1491596ef6145c..735da4aafae1ca5 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -5019,7 +5019,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
else if (getLangOpts().MicrosoftExt)
Diag(ColonLoc, diag::ext_ms_c_enum_fixed_underlying_type)
<< BaseRange;
- else
+ else if (!getLangOpts().C23)
Diag(ColonLoc, diag::ext_clang_c_enum_fixed_underlying_type)
<< BaseRange;
}
diff --git a/clang/test/Sema/fixed-enum.c b/clang/test/Sema/fixed-enum.c
index c77f5b0cbe79c5b..73a3fd2b09114c0 100644
--- a/clang/test/Sema/fixed-enum.c
+++ b/clang/test/Sema/fixed-enum.c
@@ -4,13 +4,17 @@
// RUN: %clang_cc1 -Weverything -std=c11 -xc -DC11 -verify %s
// RUN: %clang_cc1 -pedantic -std=c11 -xc -DC11 -verify %s
// RUN: %clang_cc1 -Weverything -std=c11 -xc -fms-extensions -DMS -verify %s
+// RUN: %clang_cc1 -Weverything -std=c2x -xc -DC23 -verify %s
+// RUN: %clang_cc1 -pedantic -std=c2x -xc -DC23 -verify %s
+// RUN: %clang_cc1 -Weverything -std=c23 -xc -DC23 -verify %s
+// RUN: %clang_cc1 -pedantic -std=c23 -xc -DC23 -verify %s
enum X : int {e};
#if defined(CXX11)
// expected-warning@-2{{enumeration types with a fixed underlying type are incompatible with C++98}}
#elif defined(CXX03)
// expected-warning@-4{{enumeration types with a fixed underlying type are a C++11 extension}}
-#elif defined(OBJC)
+#elif defined(OBJC) || defined(C23)
// No diagnostic
#elif defined(C11)
// expected-warning@-8{{enumeration types with a fixed underlying type are a Clang extension}}
@@ -21,19 +25,19 @@ enum X : int {e};
// Don't warn about the forward declaration in any language mode.
enum Fwd : int;
enum Fwd : int { e2 };
-#ifndef OBJC
+#if !defined(OBJC) && !defined(C23)
// expected-warning@-3 {{enumeration types with a fixed underlying type}}
// expected-warning@-3 {{enumeration types with a fixed underlying type}}
#endif
// Always error on the incompatible redeclaration.
enum BadFwd : int;
-#ifndef OBJC
+#if !defined(OBJC) && !defined(C23)
// expected-warning@-2 {{enumeration types with a fixed underlying type}}
#endif
// expected-note@-4 {{previous declaration is here}}
enum BadFwd : char { e3 };
-#ifndef OBJC
+#if !defined(OBJC) && !defined(C23)
// expected-warning@-2 {{enumeration types with a fixed underlying type}}
#endif
// expected-error@-4 {{enumeration redeclared with different underlying type 'char' (was 'int')}}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this needs a release note as well (see docs/ReleaseNotes.rst), else this LGTM.
Co-authored-by: Erich Keane <ekeane@nvidia.com>
The C23 standard supports enums with fixed underlying types (N3030 [1]),
so we shouldn't emit
-Wfixed-enum-extension
in C23 mode (since it's nolonger a Clang extension at that point).
[1] https://thephd.dev/_vendor/future_cxx/papers/C%20-%20Enhanced%20Enumerations.html