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