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