| 1 | // Test this without pch. |
| 2 | // RUN: %clang_cc1 -fblocks -include %S/types.h -fsyntax-only -verify %s |
| 3 | |
| 4 | // Test with pch. |
| 5 | // RUN: %clang_cc1 -emit-pch -fblocks -o %t %S/types.h |
| 6 | // RUN: %clang_cc1 -fblocks -include-pch %t -fsyntax-only -verify %s -ast-print |
| 7 | |
| 8 | typedef int INT; |
| 9 | INT int_value; |
| 10 | |
| 11 | __attribute__((address_space(1))) int int_as_one; |
| 12 | |
| 13 | // TYPE_EXT_QUAL |
| 14 | ASInt *as_int_ptr1 = &int_value; // expected-error{{changes address space of pointer}} |
| 15 | ASInt *as_int_ptr2 = &int_as_one; |
| 16 | |
| 17 | // TYPE_COMPLEX |
| 18 | _Complex float Cfloat_val; |
| 19 | Cfloat *Cfloat_ptr = &Cfloat_val; |
| 20 | |
| 21 | // TYPE_ATOMIC |
| 22 | _Atomic(int) AtomicInt_val; |
| 23 | AtomicInt *AtomicInt_ptr = &AtomicInt_val; |
| 24 | |
| 25 | // TYPE_POINTER |
| 26 | int_ptr int_value_ptr = &int_value; |
| 27 | |
| 28 | // TYPE_BLOCK_POINTER |
| 29 | void test_block_ptr(Block *bl) { |
| 30 | *bl = ^(int x, float f) { return x; }; |
| 31 | } |
| 32 | |
| 33 | // TYPE_CONSTANT_ARRAY |
| 34 | five_ints fvi = { 1, 2, 3, 4, 5 }; |
| 35 | |
| 36 | // TYPE_INCOMPLETE_ARRAY |
| 37 | float_array fa1 = { 1, 2, 3 }; |
| 38 | float_array fa2 = { 1, 2, 3, 4, 5, 6, 7, 8 }; |
| 39 | |
| 40 | // TYPE_VARIABLE_ARRAY in stmts.[ch] |
| 41 | |
| 42 | // TYPE_VECTOR |
| 43 | float4 f4 = { 1.0, 2.0, 3.0, 4.0 }; |
| 44 | |
| 45 | // TYPE_EXT_VECTOR |
| 46 | ext_float4 ef4 = { 1.0, 2.0, 3.0, 4.0 }; |
| 47 | |
| 48 | // TYPE_FUNCTION_NO_PROTO |
| 49 | noproto np1; |
| 50 | int np1(x, y) |
| 51 | int x; |
| 52 | float y; |
| 53 | { |
| 54 | return x; |
| 55 | } |
| 56 | |
| 57 | // TYPE_FUNCTION_PROTO |
| 58 | proto p1; |
| 59 | float p1(float x, float y, ...) { |
| 60 | return x + y; |
| 61 | } |
| 62 | proto *p2 = p1; |
| 63 | |
| 64 | // TYPE_TYPEDEF |
| 65 | int_ptr_ptr ipp = &int_value_ptr; |
| 66 | |
| 67 | // TYPE_TYPEOF_EXPR |
| 68 | typeof_17 *t17 = &int_value; |
| 69 | struct S { int x, y; }; |
| 70 | typeof_17 t17_2 = (struct S){1, 2}; // expected-error{{initializing 'typeof_17' (aka 'int') with an expression of incompatible type 'struct S'}} |
| 71 | |
| 72 | // TYPE_TYPEOF |
| 73 | int_ptr_ptr2 ipp2 = &int_value_ptr; |
| 74 | |