xref: /aosp_15_r20/external/clang/test/SemaCXX/gnu-flags.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE -Wno-gnu
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DNONE -Wno-gnu
3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DNONE -Wno-gnu
4*67e74705SXin Li 
5*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -DALL -Wgnu
6*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DALL -Wgnu
7*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DALL -Wgnu
8*67e74705SXin Li 
9*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -DALL -Wno-gnu \
10*67e74705SXin Li // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
11*67e74705SXin Li // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
12*67e74705SXin Li // RUN:   -Wgnu-empty-struct
13*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DALL -Wno-gnu \
14*67e74705SXin Li // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
15*67e74705SXin Li // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
16*67e74705SXin Li // RUN:   -Wgnu-empty-struct
17*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DALL -Wno-gnu \
18*67e74705SXin Li // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
19*67e74705SXin Li // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
20*67e74705SXin Li // RUN:   -Wgnu-empty-struct
21*67e74705SXin Li 
22*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE -Wgnu \
23*67e74705SXin Li // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
24*67e74705SXin Li // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
25*67e74705SXin Li // RUN:   -Wno-gnu-empty-struct
26*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DNONE -Wgnu \
27*67e74705SXin Li // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
28*67e74705SXin Li // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
29*67e74705SXin Li // RUN:   -Wno-gnu-empty-struct
30*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DNONE -Wgnu \
31*67e74705SXin Li // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
32*67e74705SXin Li // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
33*67e74705SXin Li // RUN:   -Wno-gnu-empty-struct
34*67e74705SXin Li 
35*67e74705SXin Li // Additional disabled tests:
36*67e74705SXin Li // %clang_cc1 -fsyntax-only -verify %s -DANONYMOUSSTRUCT -Wno-gnu -Wgnu-anonymous-struct
37*67e74705SXin Li // %clang_cc1 -fsyntax-only -verify %s -DREDECLAREDCLASSMEMBER -Wno-gnu -Wredeclared-class-member
38*67e74705SXin Li // %clang_cc1 -fsyntax-only -verify %s -DFLEXIBLEARRAYUNIONMEMBER -Wno-gnu -Wgnu-flexible-array-union-member
39*67e74705SXin Li // %clang_cc1 -fsyntax-only -verify %s -DFOLDINGCONSTANT -Wno-gnu -Wgnu-folding-constant
40*67e74705SXin Li // %clang_cc1 -fsyntax-only -verify %s -DEMPTYSTRUCT -Wno-gnu -Wgnu-empty-struct
41*67e74705SXin Li 
42*67e74705SXin Li #if NONE
43*67e74705SXin Li // expected-no-diagnostics
44*67e74705SXin Li #endif
45*67e74705SXin Li 
46*67e74705SXin Li 
47*67e74705SXin Li #if ALL || ANONYMOUSSTRUCT
48*67e74705SXin Li // expected-warning@+5 {{anonymous structs are a GNU extension}}
49*67e74705SXin Li #endif
50*67e74705SXin Li 
51*67e74705SXin Li struct as {
52*67e74705SXin Li   int x;
53*67e74705SXin Li   struct {
54*67e74705SXin Li     int a;
55*67e74705SXin Li     float b;
56*67e74705SXin Li   };
57*67e74705SXin Li };
58*67e74705SXin Li 
59*67e74705SXin Li 
60*67e74705SXin Li #if ALL || REDECLAREDCLASSMEMBER
61*67e74705SXin Li // expected-note@+6 {{previous declaration is here}}
62*67e74705SXin Li // expected-warning@+6 {{class member cannot be redeclared}}
63*67e74705SXin Li #endif
64*67e74705SXin Li 
65*67e74705SXin Li namespace rcm {
66*67e74705SXin Li   class A {
67*67e74705SXin Li     class X;
68*67e74705SXin Li     class X;
69*67e74705SXin Li     class X {};
70*67e74705SXin Li   };
71*67e74705SXin Li }
72*67e74705SXin Li 
73*67e74705SXin Li 
74*67e74705SXin Li #if ALL || FLEXIBLEARRAYUNIONMEMBER
75*67e74705SXin Li // expected-warning@+6 {{flexible array member 'c1' in a union is a GNU extension}}
76*67e74705SXin Li #endif
77*67e74705SXin Li 
78*67e74705SXin Li struct faum {
79*67e74705SXin Li    int l;
80*67e74705SXin Li    union {
81*67e74705SXin Li        int c1[];
82*67e74705SXin Li    };
83*67e74705SXin Li };
84*67e74705SXin Li 
85*67e74705SXin Li 
86*67e74705SXin Li #if (ALL || FOLDINGCONSTANT) && (__cplusplus <= 199711L) // C++03 or earlier modes
87*67e74705SXin Li // expected-warning@+4 {{in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension}}
88*67e74705SXin Li #endif
89*67e74705SXin Li 
90*67e74705SXin Li struct fic {
91*67e74705SXin Li   static const int B = int(0.75 * 1000 * 1000);
92*67e74705SXin Li };
93*67e74705SXin Li 
94*67e74705SXin Li 
95*67e74705SXin Li #if ALL || EMPTYSTRUCT
96*67e74705SXin Li // expected-warning@+3 {{flexible array member 'a' in otherwise empty struct is a GNU extension}}
97*67e74705SXin Li #endif
98*67e74705SXin Li 
99*67e74705SXin Li struct ofam {int a[];};
100*67e74705SXin Li 
101