162695611SEli Friedman // RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE -Wno-gnu
2*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DNONE -Wno-gnu
3*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DNONE -Wno-gnu
4*542f04ccSCharles Li 
562695611SEli Friedman // RUN: %clang_cc1 -fsyntax-only -verify %s -DALL -Wgnu
6*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DALL -Wgnu
7*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DALL -Wgnu
8*542f04ccSCharles Li 
962695611SEli Friedman // RUN: %clang_cc1 -fsyntax-only -verify %s -DALL -Wno-gnu \
1062695611SEli Friedman // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
1162695611SEli Friedman // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
1262695611SEli Friedman // RUN:   -Wgnu-empty-struct
13*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DALL -Wno-gnu \
14*542f04ccSCharles Li // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
15*542f04ccSCharles Li // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
16*542f04ccSCharles Li // RUN:   -Wgnu-empty-struct
17*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DALL -Wno-gnu \
18*542f04ccSCharles Li // RUN:   -Wgnu-anonymous-struct -Wredeclared-class-member \
19*542f04ccSCharles Li // RUN:   -Wgnu-flexible-array-union-member -Wgnu-folding-constant \
20*542f04ccSCharles Li // RUN:   -Wgnu-empty-struct
21*542f04ccSCharles Li 
2262695611SEli Friedman // RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE -Wgnu \
2362695611SEli Friedman // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
2462695611SEli Friedman // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
2562695611SEli Friedman // RUN:   -Wno-gnu-empty-struct
26*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -DNONE -Wgnu \
27*542f04ccSCharles Li // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
28*542f04ccSCharles Li // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
29*542f04ccSCharles Li // RUN:   -Wno-gnu-empty-struct
30*542f04ccSCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -DNONE -Wgnu \
31*542f04ccSCharles Li // RUN:   -Wno-gnu-anonymous-struct -Wno-redeclared-class-member \
32*542f04ccSCharles Li // RUN:   -Wno-gnu-flexible-array-union-member -Wno-gnu-folding-constant \
33*542f04ccSCharles Li // RUN:   -Wno-gnu-empty-struct
34*542f04ccSCharles Li 
3562695611SEli Friedman // Additional disabled tests:
3662695611SEli Friedman // %clang_cc1 -fsyntax-only -verify %s -DANONYMOUSSTRUCT -Wno-gnu -Wgnu-anonymous-struct
3762695611SEli Friedman // %clang_cc1 -fsyntax-only -verify %s -DREDECLAREDCLASSMEMBER -Wno-gnu -Wredeclared-class-member
3862695611SEli Friedman // %clang_cc1 -fsyntax-only -verify %s -DFLEXIBLEARRAYUNIONMEMBER -Wno-gnu -Wgnu-flexible-array-union-member
3962695611SEli Friedman // %clang_cc1 -fsyntax-only -verify %s -DFOLDINGCONSTANT -Wno-gnu -Wgnu-folding-constant
4062695611SEli Friedman // %clang_cc1 -fsyntax-only -verify %s -DEMPTYSTRUCT -Wno-gnu -Wgnu-empty-struct
4162695611SEli Friedman 
4262695611SEli Friedman #if NONE
4362695611SEli Friedman // expected-no-diagnostics
4462695611SEli Friedman #endif
4562695611SEli Friedman 
4662695611SEli Friedman 
4762695611SEli Friedman #if ALL || ANONYMOUSSTRUCT
4862695611SEli Friedman // expected-warning@+5 {{anonymous structs are a GNU extension}}
4962695611SEli Friedman #endif
5062695611SEli Friedman 
5162695611SEli Friedman struct as {
5262695611SEli Friedman   int x;
5362695611SEli Friedman   struct {
5462695611SEli Friedman     int a;
5562695611SEli Friedman     float b;
5662695611SEli Friedman   };
5762695611SEli Friedman };
5862695611SEli Friedman 
5962695611SEli Friedman 
6062695611SEli Friedman #if ALL || REDECLAREDCLASSMEMBER
6162695611SEli Friedman // expected-note@+6 {{previous declaration is here}}
6262695611SEli Friedman // expected-warning@+6 {{class member cannot be redeclared}}
6362695611SEli Friedman #endif
6462695611SEli Friedman 
6562695611SEli Friedman namespace rcm {
6662695611SEli Friedman   class A {
6762695611SEli Friedman     class X;
6862695611SEli Friedman     class X;
6962695611SEli Friedman     class X {};
7062695611SEli Friedman   };
7162695611SEli Friedman }
7262695611SEli Friedman 
7362695611SEli Friedman 
7462695611SEli Friedman #if ALL || FLEXIBLEARRAYUNIONMEMBER
7562695611SEli Friedman // expected-warning@+6 {{flexible array member 'c1' in a union is a GNU extension}}
7662695611SEli Friedman #endif
7762695611SEli Friedman 
7862695611SEli Friedman struct faum {
7962695611SEli Friedman    int l;
8062695611SEli Friedman    union {
8162695611SEli Friedman        int c1[];
8262695611SEli Friedman    };
8362695611SEli Friedman };
8462695611SEli Friedman 
8562695611SEli Friedman 
86*542f04ccSCharles Li #if (ALL || FOLDINGCONSTANT) && (__cplusplus <= 199711L) // C++03 or earlier modes
8762695611SEli Friedman // expected-warning@+4 {{in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension}}
8862695611SEli Friedman #endif
8962695611SEli Friedman 
9062695611SEli Friedman struct fic {
9162695611SEli Friedman   static const int B = int(0.75 * 1000 * 1000);
9262695611SEli Friedman };
9362695611SEli Friedman 
9462695611SEli Friedman 
9562695611SEli Friedman #if ALL || EMPTYSTRUCT
9662695611SEli Friedman // expected-warning@+3 {{flexible array member 'a' in otherwise empty struct is a GNU extension}}
9762695611SEli Friedman #endif
9862695611SEli Friedman 
9962695611SEli Friedman struct ofam {int a[];};
10062695611SEli Friedman 
101