10b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor// Test this without pch.
2a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fblocks -include %S/exprs.h -fsyntax-only -verify %s
30b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
40b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor// Test with pch.
5a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -emit-pch -fblocks -o %t %S/exprs.h
68e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// RUN: %clang_cc1 -fblocks -include-pch %t -fsyntax-only -verify %s -DWITH_PCH
78e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs
88e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs#ifdef WITH_PCH
98e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
108e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs#endif
110b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
128ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor__SIZE_TYPE__ size_type_value;
130b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorint integer;
140b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorlong long_integer;
1517fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregordouble floating;
16cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor_Complex double floating_complex;
170b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
180b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor// DeclRefExpr
190b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorint_decl_ref *int_ptr1 = &integer;
200b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorenum_decl_ref *enum_ptr1 = &integer;
2117fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor
2217fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor// IntegerLiteral
230b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorinteger_literal *int_ptr2 = &integer;
240b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorlong_literal *long_ptr1 = &long_integer;
250b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
26db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor// FloatingLiteral + ParenExpr
2717fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregorfloating_literal *double_ptr = &floating;
2817fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor
29cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor// ImaginaryLiteral
30cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregorimaginary_literal *cdouble_ptr = &floating_complex;
31cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor
32673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor// StringLiteral
33673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregorconst char* printHello() {
34673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor  return hello;
35673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor}
36673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor
3717fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor// CharacterLiteral
380b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorchar_literal *int_ptr3 = &integer;
39db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor
400b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor// UnaryOperator
410b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregornegate_enum *int_ptr4 = &integer;
420b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor
438ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor// OffsetOfExpr
448ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregoroffsetof_type *offsetof_ptr = &size_type_value;
458ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor
46f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne// UnaryExprOrTypeTraitExpr
470b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregortypeof(sizeof(float)) size_t_value;
480b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregortypeof_sizeof *size_t_ptr = &size_t_value;
490b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregortypeof_sizeof2 *size_t_ptr2 = &size_t_value;
500b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor
51cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor// ArraySubscriptExpr
52cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregorarray_subscript *double_ptr1_5 = &floating;
53cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor
541f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor// CallExpr
551f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregorcall_returning_double *double_ptr2 = &floating;
561f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor
571f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor// MemberExpr
581f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregormember_ref_double *double_ptr3 = &floating;
591f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor
60db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor// BinaryOperator
610b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregoradd_result *int_ptr5 = &integer;
62db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor
63ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor// CompoundAssignOperator
64ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregoraddeq_result *int_ptr6 = &integer;
65ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor
66919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisadd_result_with_typeinfo *int_typeinfo_ptr6;
67919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis
68ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor// ConditionalOperator
69ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregorconditional_operator *double_ptr4 = &floating;
70ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor
71db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor// CStyleCastExpr
72db600c330a37b1c3ab4533310729910ee188f900Douglas Gregorvoid_ptr vp1 = &integer;
73d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor
74ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor// CompoundLiteral
75ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregorstruct S s;
76ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregorcompound_literal *sptr = &s;
77ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor
78d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor// ExtVectorElementExpr
79d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregorext_vector_element *double_ptr5 = &floating;
8044cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor
81d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor// InitListExpr
82d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregordouble get_from_double_array(unsigned Idx) { return double_array[Idx]; }
83d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
84d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor/// DesignatedInitExpr
85d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregorfloat get_from_designated(unsigned Idx) {
86d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor  return designated_inits[2].y;
87d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor}
88d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
8944cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor// TypesCompatibleExpr
9044cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregortypes_compatible *int_ptr7 = &integer;
9144cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor
9244cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor// ChooseExpr
9344cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregorchoose_expr *int_ptr8 = &integer;
9444cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor
9544cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor// GNUNullExpr FIXME: needs C++
9644cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor//null_type null = __null;
9794cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor
9894cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor// ShuffleVectorExpr
9994cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregorshuffle_expr *vec_ptr = &vec2;
100f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne
101f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne// GenericSelectionExpr
102f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbournegeneric_selection_expr *double_ptr6 = &floating;
103