[clang] c6fed74 - [diag] Silence `-Wfixed-enum-extension` in C23 (#68060)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 3 13:04:26 PDT 2023
Author: Shoaib Meenai
Date: 2023-10-03T13:04:22-07:00
New Revision: c6fed74f6f2e0c208ea0324fa1668b2cba5277a9
URL: https://github.com/llvm/llvm-project/commit/c6fed74f6f2e0c208ea0324fa1668b2cba5277a9
DIFF: https://github.com/llvm/llvm-project/commit/c6fed74f6f2e0c208ea0324fa1668b2cba5277a9.diff
LOG: [diag] Silence `-Wfixed-enum-extension` in C23 (#68060)
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
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Parse/ParseDecl.cpp
clang/test/Sema/fixed-enum.c
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index f81fb27ec57320f..3a029e3a0e1ea63 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -219,6 +219,9 @@ Improvements to Clang's diagnostics
- Clang now displays an improved diagnostic and a note when a defaulted special
member is marked ``constexpr`` in a class with a virtual base class
(`#64843: <https://github.com/llvm/llvm-project/issues/64843>`_).
+- ``-Wfixed-enum-extension`` and ``-Wmicrosoft-fixed-enum`` diagnostics are no longer
+ emitted when building as C23, since C23 standardizes support for enums with a
+ fixed underlying type.
Bug Fixes in This Version
-------------------------
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index a1491596ef6145c..3cad57e719aad97 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -5009,7 +5009,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
BaseRange = SourceRange(ColonLoc, DeclaratorInfo.getSourceRange().getEnd());
- if (!getLangOpts().ObjC) {
+ if (!getLangOpts().ObjC && !getLangOpts().C23) {
if (getLangOpts().CPlusPlus11)
Diag(ColonLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type)
<< BaseRange;
diff --git a/clang/test/Sema/fixed-enum.c b/clang/test/Sema/fixed-enum.c
index c77f5b0cbe79c5b..954ff8c452b80ca 100644
--- a/clang/test/Sema/fixed-enum.c
+++ b/clang/test/Sema/fixed-enum.c
@@ -4,13 +4,18 @@
// 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
+// RUN: %clang_cc1 -Weverything -std=c23 -xc -fms-extensions -DC23 -verify %s
enum X : int {e};
#if defined(CXX11)
// expected-warning at -2{{enumeration types with a fixed underlying type are incompatible with C++98}}
#elif defined(CXX03)
// expected-warning at -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 at -8{{enumeration types with a fixed underlying type are a Clang extension}}
@@ -21,19 +26,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 at -3 {{enumeration types with a fixed underlying type}}
// expected-warning at -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 at -2 {{enumeration types with a fixed underlying type}}
#endif
// expected-note at -4 {{previous declaration is here}}
enum BadFwd : char { e3 };
-#ifndef OBJC
+#if !defined(OBJC) && !defined(C23)
// expected-warning at -2 {{enumeration types with a fixed underlying type}}
#endif
// expected-error at -4 {{enumeration redeclared with
diff erent underlying type 'char' (was 'int')}}
More information about the cfe-commits
mailing list