1b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// Test this without pch. 2a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fblocks -include %S/types.h -fsyntax-only -verify %s 3b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 4b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// Test with pch. 5a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -emit-pch -fblocks -o %t %S/types.h 6400f5125e2432d648f2c8a31b36a7f318a880c47Argyrios Kyrtzidis// RUN: %clang_cc1 -fblocks -include-pch %t -fsyntax-only -verify %s -ast-print 7b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 86d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregortypedef int INT; 96d473967121ac70ecede83bb2b47247e9a3766f3Douglas GregorINT int_value; 106d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregor 116d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregor__attribute__((address_space(1))) int int_as_one; 126d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregor 136d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregor// TYPE_EXT_QUAL 1486c05f3f28bcf07c97dfb1881686fc43be2f47c2John McCallASInt *as_int_ptr1 = &int_value; // expected-error{{changes address space of pointer}} 156d473967121ac70ecede83bb2b47247e9a3766f3Douglas GregorASInt *as_int_ptr2 = &int_as_one; 166d473967121ac70ecede83bb2b47247e9a3766f3Douglas Gregor 17b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_COMPLEX 18b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor_Complex float Cfloat_val; 19b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas GregorCfloat *Cfloat_ptr = &Cfloat_val; 20b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 21dbc68bd28d5868f3b1b5179add40b33cec7bea07Eli Friedman// TYPE_ATOMIC 22dbc68bd28d5868f3b1b5179add40b33cec7bea07Eli Friedman_Atomic(int) AtomicInt_val; 23dbc68bd28d5868f3b1b5179add40b33cec7bea07Eli FriedmanAtomicInt *AtomicInt_ptr = &AtomicInt_val; 24dbc68bd28d5868f3b1b5179add40b33cec7bea07Eli Friedman 25b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_POINTER 26b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorint_ptr int_value_ptr = &int_value; 27b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 28b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_BLOCK_POINTER 29b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorvoid test_block_ptr(Block *bl) { 30b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor *bl = ^(int x, float f) { return x; }; 31b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor} 32b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 33b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_CONSTANT_ARRAY 34b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorfive_ints fvi = { 1, 2, 3, 4, 5 }; 35b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 36b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_INCOMPLETE_ARRAY 37b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorfloat_array fa1 = { 1, 2, 3 }; 38b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorfloat_array fa2 = { 1, 2, 3, 4, 5, 6, 7, 8 }; 39b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 40ba48d05c9c43dca8efa49d70ad3331fdcd6e2b3aDouglas Gregor// TYPE_VARIABLE_ARRAY in stmts.[ch] 41b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 42b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_VECTOR 43b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorfloat4 f4 = { 1.0, 2.0, 3.0, 4.0 }; 44b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 45b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_EXT_VECTOR 46b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorext_float4 ef4 = { 1.0, 2.0, 3.0, 4.0 }; 47b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 48b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_FUNCTION_NO_PROTO 49b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregornoproto np1; 50b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorint np1(x, y) 51b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor int x; 52b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor float y; 53b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor{ 54b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor return x; 55b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor} 56b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 57b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_FUNCTION_PROTO 58b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorproto p1; 59b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorfloat p1(float x, float y, ...) { 60b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor return x + y; 61b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor} 62b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorproto *p2 = p1; 63b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 64b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_TYPEDEF 65b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorint_ptr_ptr ipp = &int_value_ptr; 66b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 670b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor// TYPE_TYPEOF_EXPR 680b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregortypeof_17 *t17 = &int_value; 690b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorstruct S { int x, y; }; 7008a41901e18aeb91b87d031b93df70374af02564Douglas Gregortypeof_17 t17_2 = (struct S){1, 2}; // expected-error{{initializing 'typeof_17' (aka 'int') with an expression of incompatible type 'struct S'}} 71b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor 72b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregor// TYPE_TYPEOF 73b4e715beeb670b30a8d1237085e3379fe28afb0fDouglas Gregorint_ptr_ptr2 ipp2 = &int_value_ptr; 74