1 // RUN: %clang_cc1 -std=c++1z -verify %s -Wno-vexing-parse 2 3 int g, h; 4 typedef int T; 5 int f() { 6 // init-statement declarations 7 if (T n = 0; n != 0) {} 8 if (T f(); f()) {} 9 if (T(f()); f()) {} 10 if (T(f()), g, h; f()) {} 11 if (T f(); f()) {} 12 if (T f(), g, h; f()) {} 13 if (T(n) = 0; n) {} 14 15 // init-statement expressions 16 if (T{f()}; f()) {} 17 if (T{f()}, g, h; f()) {} // expected-warning 2{{unused}} 18 if (T(f()), g, h + 1; f()) {} // expected-warning 2{{unused}} 19 20 // condition declarations 21 if (T(n){g}) {} 22 if (T f()) {} // expected-error {{function type}} 23 if (T f(), g, h) {} // expected-error {{function type}} 24 if (T(n) = 0) {} 25 26 // condition expressions 27 if (T(f())) {} 28 if (T{f()}) {} 29 if (T(f()), g, h) {} // expected-warning 2{{unused}} 30 if (T{f()}, g, h) {} // expected-warning 2{{unused}} 31 32 // none of the above, disambiguated as expression (can't be a declaration) 33 if (T(n)(g)) {} // expected-error {{undeclared identifier 'n'}} 34 if (T(n)(int())) {} // expected-error {{undeclared identifier 'n'}} 35 36 // Likewise for 'switch' 37 switch (int n; n) {} 38 switch (g; int g = 5) {} 39 40 if (int a, b; int c = a) { // expected-note 6{{previous}} 41 int a; // expected-error {{redefinition}} 42 int b; // expected-error {{redefinition}} 43 int c; // expected-error {{redefinition}} 44 } else { 45 int a; // expected-error {{redefinition}} 46 int b; // expected-error {{redefinition}} 47 int c; // expected-error {{redefinition}} 48 } 49 50 return 0; 51 } 52