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