xref: /aosp_15_r20/external/clang/test/PCH/exprs.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li const 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 Li double get_from_double_array(unsigned Idx) { return double_array[Idx]; }
83*67e74705SXin Li 
84*67e74705SXin Li /// DesignatedInitExpr
get_from_designated(unsigned Idx)85*67e74705SXin Li float 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