Home | History | Annotate | Download | only in PCH
      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