1*67e74705SXin Li // Test this without pch. 2*67e74705SXin Li // RUN: %clang_cc1 -fblocks -include %S/exprs.h -fsyntax-only -verify %s 3*67e74705SXin Li 4*67e74705SXin Li // Test with pch. 5*67e74705SXin Li // RUN: %clang_cc1 -emit-pch -fblocks -o %t %S/exprs.h 6*67e74705SXin Li // RUN: %clang_cc1 -fblocks -include-pch %t -fsyntax-only -verify %s -DWITH_PCH 7*67e74705SXin Li 8*67e74705SXin Li #ifdef WITH_PCH 9*67e74705SXin Li // expected-no-diagnostics 10*67e74705SXin Li #endif 11*67e74705SXin Li 12*67e74705SXin Li __SIZE_TYPE__ size_type_value; 13*67e74705SXin Li int integer; 14*67e74705SXin Li long long_integer; 15*67e74705SXin Li double floating; 16*67e74705SXin Li _Complex double floating_complex; 17*67e74705SXin Li 18*67e74705SXin Li // DeclRefExpr 19*67e74705SXin Li int_decl_ref *int_ptr1 = &integer; 20*67e74705SXin Li enum_decl_ref *enum_ptr1 = &integer; 21*67e74705SXin Li 22*67e74705SXin Li // IntegerLiteral 23*67e74705SXin Li integer_literal *int_ptr2 = &integer; 24*67e74705SXin Li long_literal *long_ptr1 = &long_integer; 25*67e74705SXin Li 26*67e74705SXin Li // FloatingLiteral + ParenExpr 27*67e74705SXin Li floating_literal *double_ptr = &floating; 28*67e74705SXin Li 29*67e74705SXin Li // ImaginaryLiteral 30*67e74705SXin Li imaginary_literal *cdouble_ptr = &floating_complex; 31*67e74705SXin Li 32*67e74705SXin Li // StringLiteral printHello()33*67e74705SXin Liconst char* printHello() { 34*67e74705SXin Li return hello; 35*67e74705SXin Li } 36*67e74705SXin Li 37*67e74705SXin Li // CharacterLiteral 38*67e74705SXin Li char_literal *int_ptr3 = &integer; 39*67e74705SXin Li 40*67e74705SXin Li // UnaryOperator 41*67e74705SXin Li negate_enum *int_ptr4 = &integer; 42*67e74705SXin Li 43*67e74705SXin Li // OffsetOfExpr 44*67e74705SXin Li offsetof_type *offsetof_ptr = &size_type_value; 45*67e74705SXin Li 46*67e74705SXin Li // UnaryExprOrTypeTraitExpr 47*67e74705SXin Li typeof(sizeof(float)) size_t_value; 48*67e74705SXin Li typeof_sizeof *size_t_ptr = &size_t_value; 49*67e74705SXin Li typeof_sizeof2 *size_t_ptr2 = &size_t_value; 50*67e74705SXin Li 51*67e74705SXin Li // ArraySubscriptExpr 52*67e74705SXin Li array_subscript *double_ptr1_5 = &floating; 53*67e74705SXin Li 54*67e74705SXin Li // CallExpr 55*67e74705SXin Li call_returning_double *double_ptr2 = &floating; 56*67e74705SXin Li 57*67e74705SXin Li // MemberExpr 58*67e74705SXin Li member_ref_double *double_ptr3 = &floating; 59*67e74705SXin Li 60*67e74705SXin Li // BinaryOperator 61*67e74705SXin Li add_result *int_ptr5 = &integer; 62*67e74705SXin Li 63*67e74705SXin Li // CompoundAssignOperator 64*67e74705SXin Li addeq_result *int_ptr6 = &integer; 65*67e74705SXin Li 66*67e74705SXin Li add_result_with_typeinfo *int_typeinfo_ptr6; 67*67e74705SXin Li 68*67e74705SXin Li // ConditionalOperator 69*67e74705SXin Li conditional_operator *double_ptr4 = &floating; 70*67e74705SXin Li 71*67e74705SXin Li // CStyleCastExpr 72*67e74705SXin Li void_ptr vp1 = &integer; 73*67e74705SXin Li 74*67e74705SXin Li // CompoundLiteral 75*67e74705SXin Li struct S s; 76*67e74705SXin Li compound_literal *sptr = &s; 77*67e74705SXin Li 78*67e74705SXin Li // ExtVectorElementExpr 79*67e74705SXin Li ext_vector_element *double_ptr5 = &floating; 80*67e74705SXin Li 81*67e74705SXin Li // InitListExpr get_from_double_array(unsigned Idx)82*67e74705SXin Lidouble get_from_double_array(unsigned Idx) { return double_array[Idx]; } 83*67e74705SXin Li 84*67e74705SXin Li /// DesignatedInitExpr get_from_designated(unsigned Idx)85*67e74705SXin Lifloat get_from_designated(unsigned Idx) { 86*67e74705SXin Li return designated_inits[2].y; 87*67e74705SXin Li } 88*67e74705SXin Li 89*67e74705SXin Li // TypesCompatibleExpr 90*67e74705SXin Li types_compatible *int_ptr7 = &integer; 91*67e74705SXin Li 92*67e74705SXin Li // ChooseExpr 93*67e74705SXin Li choose_expr *int_ptr8 = &integer; 94*67e74705SXin Li 95*67e74705SXin Li // GNUNullExpr FIXME: needs C++ 96*67e74705SXin Li //null_type null = __null; 97*67e74705SXin Li 98*67e74705SXin Li // ShuffleVectorExpr 99*67e74705SXin Li shuffle_expr *vec_ptr = &vec2; 100*67e74705SXin Li 101*67e74705SXin Li // GenericSelectionExpr 102*67e74705SXin Li generic_selection_expr *double_ptr6 = &floating; 103