74 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 2 3void test() {4 int x;5 if (x) ++x;6 if (int x=0) ++x;7 8 typedef int arr[10];9 while (arr x={0}) ; // expected-error {{an array type is not allowed here}}10 while (int f()=0) ; // expected-error {{a function type is not allowed here}}11 12 struct S {} s;13 if (s) ++x; // expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}}14 while (struct S x=s) ; // expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}}15 do ; while (s); // expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}}16 for (;s;) ; // expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}}17 switch (s) {} // expected-error {{statement requires expression of integer type ('struct S' invalid)}}18 19 while (struct NewS *x=0) ;20 while (struct S {} *x=0) ; // expected-error {{'S' cannot be defined in a condition}}21 while (struct {} *x=0) ; // expected-error-re {{'(unnamed struct at {{.*}})' cannot be defined in a condition}}22 switch (enum {E} x=0) ; // expected-error-re {{'(unnamed enum at {{.*}})' cannot be defined in a condition}}23 // expected-warning@-1 {{switch statement has empty body}}24 // expected-note@-2 {{put the semicolon on a separate line}}25 26 if (int x=0) { // expected-note 2 {{previous definition is here}}27 int x; // expected-error {{redefinition of 'x'}}28 }29 else30 int x; // expected-error {{redefinition of 'x'}}31 while (int x=0) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}32 while (int x=0) { int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}33 for (int x; int x=0; ) ; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}34 for (int x; ; ) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}35 for (; int x=0; ) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}36 for (; int x=0; ) { int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}37 switch (int x=0) { default: int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}}38}39 40int* get_int_ptr();41 42void test2() {43 float *ip;44 if (int *ip = ip) {45 }46}47 48// Make sure we do function/array decay.49void test3() {50 if ("help")51 (void) 0;52 53 if (test3) // expected-warning {{address of function 'test3' will always evaluate to 'true'}} \54 expected-note {{prefix with the address-of operator to silence this warning}}55 (void) 0;56}57 58void test4(bool (&x)(void)) {59 while (x);60}61 62template <class>63void test5() {64 if (struct S {}* p = 0) // expected-error {{'S' cannot be defined in a condition}}65 ;66}67void test5_inst() {68 test5<int>();69}70 71void PR28373() {72 if (!x) {} // expected-error {{undeclared}}73}74