mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-18 16:58:23 +00:00
[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
This commit is contained in:
parent
1129dec778
commit
c6fed74f6f
@ -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
|
||||
-------------------------
|
||||
|
@ -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;
|
||||
|
@ -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@-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 +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@-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')}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user