https://github.com/smeenai updated https://github.com/llvm/llvm-project/pull/68060
>From b931e047168d2312f05c0fbf2813915cc4e06ae8 Mon Sep 17 00:00:00 2001 From: Shoaib Meenai <smee...@fb.com> Date: Mon, 2 Oct 2023 17:50:36 -0700 Subject: [PATCH 1/2] [diag] Silence `-Wfixed-enum-extension` in C23 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 --- clang/lib/Parse/ParseDecl.cpp | 2 +- clang/test/Sema/fixed-enum.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) 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')}} >From 862b7a64968ababc2d6b3495ba75271b764ca335 Mon Sep 17 00:00:00 2001 From: Shoaib Meenai <smee...@fb.com> Date: Tue, 3 Oct 2023 07:57:39 -0700 Subject: [PATCH 2/2] Address comment --- clang/lib/Parse/ParseDecl.cpp | 4 ++-- clang/test/Sema/fixed-enum.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 735da4aafae1ca5..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; @@ -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 if (!getLangOpts().C23) + else 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 73a3fd2b09114c0..954ff8c452b80ca 100644 --- a/clang/test/Sema/fixed-enum.c +++ b/clang/test/Sema/fixed-enum.c @@ -8,6 +8,7 @@ // 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) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits