https://github.com/AaronBallman created https://github.com/llvm/llvm-project/pull/218669
Adding the pedantic diagnostic after supporting the extension for so long without correctly diagnosing it is disruptive, so this gives folks a way to disable just the __COUNTER__ pedantic diagnostic without losing all other pedantic diagnostics. Fixes #196557 >From 0b20f92079d1bd732535cc694e27da57a9177170 Mon Sep 17 00:00:00 2001 From: Aaron Ballman <[email protected]> Date: Tue, 25 Aug 2026 08:16:28 -0400 Subject: [PATCH] Give the __COUNTER__ pedantic diagnostic a group Adding the pedantic diagnostic after supporting the extension for so long without correctly diagnosing it is disruptive, so this gives folks a way to disable just the __COUNTER__ pedantic diagnostic without losing all other pedantic diagnostics. Fixes #196557 --- clang/include/clang/Basic/DiagnosticGroups.td | 3 ++- clang/include/clang/Basic/DiagnosticLexKinds.td | 3 ++- clang/test/C/C2y/n3457.c | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 9ee0b61a96a32..7af6a3b2d284c 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -1026,6 +1026,7 @@ def SuspiciousMemaccess : DiagGroup<"suspicious-memaccess", NonTrivialMemaccess, MemsetTransposedArgs, SuspiciousBzero]>; def StaticInInline : DiagGroup<"static-in-inline">; def StaticLocalInInline : DiagGroup<"static-local-in-inline">; +def CounterExt : DiagGroup<"counter-extension">; def UniqueObjectDuplication : DiagGroup<"unique-object-duplication"> { code Documentation = [{ Warns when objects which are supposed to be globally unique might get duplicated @@ -1616,7 +1617,7 @@ def C23 : DiagGroup<"c23-extensions", [VariadicMacroArgumentsOmitted]>; def : DiagGroup<"c2x-extensions", [C23]>; // A warning group for warnings about using C2y features as extensions. -def C2y : DiagGroup<"c2y-extensions", [StaticInInline]>; +def C2y : DiagGroup<"c2y-extensions", [StaticInInline, CounterExt]>; // Previously supported warning group which is no longer pertinent as binary // literals are a C++14 and C23 extension now instead of a GNU extension. diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td index bdb78ed80b7b4..291ebba95b9cf 100644 --- a/clang/include/clang/Basic/DiagnosticLexKinds.td +++ b/clang/include/clang/Basic/DiagnosticLexKinds.td @@ -93,7 +93,8 @@ def err_conflict_marker : Error<"version control conflict marker in file">; def err_counter_overflow : Error< "'__COUNTER__' value cannot exceed 2'147'483'647">; def ext_counter : Extension< - "'__COUNTER__' is a C2y extension">, InGroup<C2y>, SuppressInSystemMacro; + "'__COUNTER__' is a C2y extension">, + InGroup<CounterExt>, SuppressInSystemMacro; def warn_counter : Warning< "'__COUNTER__' is incompatible with standards before C2y">, InGroup<CPre2yCompat>, DefaultIgnore, SuppressInSystemMacro; diff --git a/clang/test/C/C2y/n3457.c b/clang/test/C/C2y/n3457.c index d71a3f37e1343..a4733e9fed8b8 100644 --- a/clang/test/C/C2y/n3457.c +++ b/clang/test/C/C2y/n3457.c @@ -1,6 +1,9 @@ // RUN: %clang_cc1 -verify=ext -std=c23 -pedantic %s // RUN: %clang_cc1 -verify=ext -pedantic -x c++ %s // RUN: %clang_cc1 -verify=pre -std=c2y -pedantic -Wpre-c2y-compat %s +// RUN: %clang_cc1 -verify=ok -std=c23 -pedantic -Wno-counter-extension %s +// RUN: %clang_cc1 -verify=ok -std=c23 -Wno-counter-extension -pedantic-errors %s +// ok-no-diagnostics /* WG14 N3457: Clang 22 * The __COUNTER__ predefined macro _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
