| // Test this without pch. |
| // RUN: %clang_cc1 -fblocks -include %S/types.h -fsyntax-only -verify %s |
| |
| // Test with pch. |
| // RUN: %clang_cc1 -emit-pch -fblocks -o %t %S/types.h |
| // RUN: %clang_cc1 -fblocks -include-pch %t -fsyntax-only -verify %s -ast-print |
| |
| typedef int INT; |
| INT int_value; |
| |
| __attribute__((address_space(1))) int int_as_one; |
| |
| // TYPE_EXT_QUAL |
| ASInt *as_int_ptr1 = &int_value; // expected-error{{changes address space of pointer}} |
| ASInt *as_int_ptr2 = &int_as_one; |
| |
| // TYPE_COMPLEX |
| _Complex float Cfloat_val; |
| Cfloat *Cfloat_ptr = &Cfloat_val; |
| |
| // TYPE_ATOMIC |
| _Atomic(int) AtomicInt_val; |
| AtomicInt *AtomicInt_ptr = &AtomicInt_val; |
| |
| // TYPE_POINTER |
| int_ptr int_value_ptr = &int_value; |
| |
| // TYPE_BLOCK_POINTER |
| void test_block_ptr(Block *bl) { |
| *bl = ^(int x, float f) { return x; }; |
| } |
| |
| // TYPE_CONSTANT_ARRAY |
| five_ints fvi = { 1, 2, 3, 4, 5 }; |
| |
| // TYPE_INCOMPLETE_ARRAY |
| float_array fa1 = { 1, 2, 3 }; |
| float_array fa2 = { 1, 2, 3, 4, 5, 6, 7, 8 }; |
| |
| // TYPE_VARIABLE_ARRAY in stmts.[ch] |
| |
| // TYPE_VECTOR |
| float4 f4 = { 1.0, 2.0, 3.0, 4.0 }; |
| |
| // TYPE_EXT_VECTOR |
| ext_float4 ef4 = { 1.0, 2.0, 3.0, 4.0 }; |
| |
| // TYPE_FUNCTION_NO_PROTO |
| noproto np1; |
| int np1(x, y) |
| int x; |
| float y; |
| { |
| return x; |
| } |
| |
| // TYPE_FUNCTION_PROTO |
| proto p1; |
| float p1(float x, float y, ...) { |
| return x + y; |
| } |
| proto *p2 = p1; |
| |
| // TYPE_TYPEDEF |
| int_ptr_ptr ipp = &int_value_ptr; |
| |
| // TYPE_TYPEOF_EXPR |
| typeof_17 *t17 = &int_value; |
| struct S { int x, y; }; |
| typeof_17 t17_2 = (struct S){1, 2}; // expected-error{{initializing 'typeof_17' (aka 'int') with an expression of incompatible type 'struct S'}} |
| |
| // TYPE_TYPEOF |
| int_ptr_ptr2 ipp2 = &int_value_ptr; |