blob: 7012422aad331792d89ed77aeeb7d8f55e4f0e34 [file] [log] [blame]
Douglas Gregor0b748912009-04-14 21:18:50 +00001// Header for PCH test exprs.c
2
3// DeclRefExpr
4int i = 17;
5enum Enum { Enumerator = 18 };
6typedef typeof(i) int_decl_ref;
7typedef typeof(Enumerator) enum_decl_ref;
8
Douglas Gregor17fc2232009-04-14 21:55:33 +00009// IntegerLiteral
Douglas Gregor0b748912009-04-14 21:18:50 +000010typedef typeof(17) integer_literal;
11typedef typeof(17l) long_literal;
12
Douglas Gregordb600c32009-04-15 00:25:59 +000013// FloatingLiteral and ParenExpr
Douglas Gregorc04db4f2009-04-14 23:59:37 +000014typedef typeof((42.5)) floating_literal;
Douglas Gregor17fc2232009-04-14 21:55:33 +000015
Douglas Gregorcb2ca732009-04-15 22:19:53 +000016// ImaginaryLiteral
17typedef typeof(17.0i) imaginary_literal;
18
Douglas Gregor673ecd62009-04-15 16:35:07 +000019// StringLiteral
20const char *hello = "Hello" "PCH" "World";
21
Douglas Gregor17fc2232009-04-14 21:55:33 +000022// CharacterLiteral
Douglas Gregor0b748912009-04-14 21:18:50 +000023typedef typeof('a') char_literal;
Douglas Gregor17fc2232009-04-14 21:55:33 +000024
Douglas Gregor0b0b77f2009-04-15 15:58:59 +000025// UnaryOperator
26typedef typeof(-Enumerator) negate_enum;
27
28// SizeOfAlignOfExpr
29typedef typeof(sizeof(int)) typeof_sizeof;
30typedef typeof(sizeof(Enumerator)) typeof_sizeof2;
31
Douglas Gregorcb2ca732009-04-15 22:19:53 +000032// ArraySubscriptExpr
33extern double values[];
34typedef typeof(values[2]) array_subscript;
35
Douglas Gregor1f0d0132009-04-15 17:43:59 +000036// CallExpr
37double dplus(double x, double y);
38double d0, d1;
39typedef typeof((&dplus)(d0, d1)) call_returning_double;
40
41// MemberExpr
42struct S {
43 double x;
44};
45typedef typeof(((struct S*)0)->x) member_ref_double;
46
Douglas Gregordb600c32009-04-15 00:25:59 +000047// BinaryOperator
48typedef typeof(i + Enumerator) add_result;
49
Douglas Gregorad90e962009-04-15 22:40:36 +000050// CompoundAssignOperator
51typedef typeof(i += Enumerator) addeq_result;
52
53// ConditionalOperator
54typedef typeof(i? : d0) conditional_operator;
55
Douglas Gregordb600c32009-04-15 00:25:59 +000056// CStyleCastExpr
57typedef typeof((void *)0) void_ptr;
58
Douglas Gregorba6d7e72009-04-16 02:33:48 +000059// CompoundLiteral
60typedef typeof((struct S){.x = 3.5}) compound_literal;
61
Douglas Gregord3c98a02009-04-15 23:02:49 +000062// ExtVectorElementExpr
63typedef __attribute__(( ext_vector_type(2) )) double double2;
Douglas Gregor94cd5d12009-04-16 00:01:45 +000064extern double2 vec2, vec2b;
Douglas Gregord3c98a02009-04-15 23:02:49 +000065typedef typeof(vec2.x) ext_vector_element;
Douglas Gregor44cae0c2009-04-15 23:33:31 +000066
Douglas Gregord077d752009-04-16 00:55:48 +000067// InitListExpr
68double double_array[3] = { 1.0, 2.0 };
69
70// DesignatedInitExpr
71struct {
72 int x;
73 float y;
74} designated_inits[3] = { [0].y = 17, [2].x = 12.3, 3.5 };
75
Douglas Gregor44cae0c2009-04-15 23:33:31 +000076// TypesCompatibleExpr
77typedef typeof(__builtin_types_compatible_p(float, double)) types_compatible;
78
79// ChooseExpr
80typedef typeof(__builtin_choose_expr(17 > 19, d0, 1)) choose_expr;
81
82// GNUNullExpr FIXME: needs C++
83// typedef typeof(__null) null_type;
Douglas Gregor94cd5d12009-04-16 00:01:45 +000084
85// ShuffleVectorExpr
86typedef typeof(__builtin_shufflevector(vec2, vec2b, 2, 1)) shuffle_expr;