Skip to content

Commit 151214b

Browse files
committed
Silently accept -Wgnu-empty-initializer
5d8aaad removed the warning group as the functionality is no longer a GNU extension. However, users have asked for the warning group to be supported so that code transitioning from Clang 16 to Clang 17 has an easier migration path when compiling with -Werror. This patch restores the warning group, but as an ignored warning group because the functionality is now always considered to be a C extension rather than a GNU extension. This allows users to do: -Werror -pedantic -Wno-gnu-empty-intializer -Wno-c2x-extensions to silence the diagnostics in both Clang 16 and Clang 17. Fixes #64357 Differential Revision: https://reviews.llvm.org/D157503
1 parent aa603c4 commit 151214b

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def DeprecatedStaticAnalyzerFlag : DiagGroup<"deprecated-static-analyzer-flag">;
2020
// Empty DiagGroups are recognized by clang but ignored.
2121
def ODR : DiagGroup<"odr">;
2222
def : DiagGroup<"abi">;
23+
def : DiagGroup<"gnu-empty-initializer">; // Now a C extension, not GNU.
2324
def AbsoluteValue : DiagGroup<"absolute-value">;
2425
def MisspelledAssumption : DiagGroup<"misspelled-assumption">;
2526
def UnknownAssumption : DiagGroup<"unknown-assumption">;

clang/test/Sema/empty-init.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// RUN: %clang_cc1 %s -std=c2x -Wall -pedantic -fsyntax-only -verify=good
2+
// RUN: %clang_cc1 %s -std=c2x -Wpre-c2x-compat -fsyntax-only -verify=c2x
3+
// RUN: %clang_cc1 %s -std=c2x -Wpre-c2x-compat -Wno-gnu-empty-initializer -fsyntax-only -verify=c2x
4+
// RUN: %clang_cc1 %s -std=c2x -Wgnu-empty-initializer -fsyntax-only -verify=good
5+
// RUN: %clang_cc1 %s -std=c17 -Wall -pedantic -fsyntax-only -verify=c2x-ext
6+
// RUN: %clang_cc1 %s -std=c17 -Wgnu-empty-initializer -fsyntax-only -verify=good
7+
// RUN: %clang_cc1 %s -std=c17 -Wc2x-extensions -fsyntax-only -verify=c2x-ext
8+
// RUN: %clang_cc1 %s -std=c17 -Wpre-c2x-compat -fsyntax-only -verify=good
9+
10+
// good-no-diagnostics
11+
12+
// Empty brace initialization used to be a GNU extension, but the feature was
13+
// added to C2x. We now treat empty initialization as a C extension rather than
14+
// a GNU extension. Thus, -Wgnu-empty-initializer is always silently ignored.
15+
16+
struct S {
17+
int a;
18+
};
19+
20+
struct S s = {}; /* c2x-warning {{use of an empty initializer is incompatible with C standards before C2x}}
21+
c2x-ext-warning {{use of an empty initializer is a C2x extension}}
22+
*/
23+
24+
void func(void) {
25+
struct S s2 = {}; /* c2x-warning {{use of an empty initializer is incompatible with C standards before C2x}}
26+
c2x-ext-warning {{use of an empty initializer is a C2x extension}}
27+
*/
28+
(void)s2;
29+
}
30+

0 commit comments

Comments
 (0)