| Daniel Dunbar | a572887 | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -verify %s  | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 2 |  | 
 | 3 | void test() { | 
| Argyrios Kyrtzidis | 4c0f56b | 2008-09-10 23:34:50 +0000 | [diff] [blame] | 4 |   int x; | 
 | 5 |   if (x) ++x; | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 6 |   if (int x=0) ++x; | 
 | 7 |  | 
 | 8 |   typedef int arr[10]; | 
| Eli Friedman | cfdc81a | 2009-12-19 08:11:05 +0000 | [diff] [blame] | 9 |   while (arr x=0) ; // expected-error {{an array type is not allowed here}} expected-error {{array initializer must be an initializer list}} | 
| Chris Lattner | 5f4a682 | 2008-11-23 23:12:31 +0000 | [diff] [blame] | 10 |   while (int f()=0) ; // expected-error {{a function type is not allowed here}} | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 11 |  | 
 | 12 |   struct S {} s; | 
| Douglas Gregor | 09f41cf | 2009-01-14 15:45:31 +0000 | [diff] [blame] | 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'}} | 
| Chris Lattner | 5f4a682 | 2008-11-23 23:12:31 +0000 | [diff] [blame] | 17 |   switch (s) {} // expected-error {{statement requires expression of integer type ('struct S' invalid)}} | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 18 |  | 
| John McCall | 220ccbf | 2010-01-13 00:25:19 +0000 | [diff] [blame] | 19 |   while (struct S {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{no viable conversion}} expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}} expected-note{{candidate constructor (the implicit copy constructor)}} | 
| John McCall | 73061d0 | 2010-03-19 07:56:44 +0000 | [diff] [blame] | 20 |   while (struct {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{no viable conversion}} expected-error {{not contextually convertible to 'bool'}} expected-note{{candidate constructor (the implicit copy constructor)}} | 
| Douglas Gregor | 30ab371 | 2010-02-17 23:29:11 +0000 | [diff] [blame] | 21 |   switch (enum {E} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{cannot initialize}} \ | 
 | 22 |   // expected-warning{{enumeration value 'E' not handled in switch}} | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 23 |  | 
| Sebastian Redl | 3cb0692 | 2009-02-07 19:52:04 +0000 | [diff] [blame] | 24 |   if (int x=0) { // expected-note 2 {{previous definition is here}} | 
| Chris Lattner | 5f4a682 | 2008-11-23 23:12:31 +0000 | [diff] [blame] | 25 |     int x;  // expected-error {{redefinition of 'x'}} | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 26 |   } | 
 | 27 |   else | 
| Chris Lattner | 5f4a682 | 2008-11-23 23:12:31 +0000 | [diff] [blame] | 28 |     int x;  // expected-error {{redefinition of 'x'}} | 
 | 29 |   while (int x=0) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 30 |   while (int x=0) { int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 31 |   for (int x; int x=0; ) ; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 32 |   for (int x; ; ) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 33 |   for (; int x=0; ) int x; // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 34 |   for (; int x=0; ) { int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
 | 35 |   switch (int x=0) { default: int x; } // expected-error {{redefinition of 'x'}} expected-note {{previous definition is here}} | 
| Argyrios Kyrtzidis | 5921093 | 2008-09-10 02:17:11 +0000 | [diff] [blame] | 36 | } | 
| Douglas Gregor | 99e9b4d | 2009-11-25 00:27:52 +0000 | [diff] [blame] | 37 |  | 
 | 38 | int* get_int_ptr(); | 
 | 39 |  | 
 | 40 | void test2() { | 
 | 41 |   float *ip; | 
 | 42 |   if (int *ip = ip) { | 
 | 43 |   } | 
 | 44 | } |