Home | History | Annotate | Download | only in PCH
      1 // Header for PCH test exprs.c
      2 
      3 // DeclRefExpr
      4 int i = 17;
      5 enum Enum { Enumerator = 18 };
      6 typedef typeof(i) int_decl_ref;
      7 typedef typeof(Enumerator) enum_decl_ref;
      8 
      9 // IntegerLiteral
     10 typedef typeof(17) integer_literal;
     11 typedef typeof(17l) long_literal;
     12 
     13 // FloatingLiteral and ParenExpr
     14 typedef typeof((42.5)) floating_literal;
     15 
     16 // ImaginaryLiteral
     17 typedef typeof(17.0i) imaginary_literal;
     18 
     19 // StringLiteral
     20 const char *hello = "Hello" "PCH" "World";
     21 
     22 // CharacterLiteral
     23 typedef typeof('a') char_literal;
     24 
     25 // UnaryOperator
     26 typedef typeof(-Enumerator) negate_enum;
     27 
     28 // OffsetOfExpr
     29 struct X {
     30   int member;
     31 };
     32 struct Y {
     33   struct X array[5];
     34 };
     35 struct Z {
     36   struct Y y;
     37 };
     38 typedef typeof(__builtin_offsetof(struct Z, y.array[1 + 2].member))
     39   offsetof_type;
     40 
     41 // UnaryExprOrTypeTraitExpr
     42 typedef typeof(sizeof(int)) typeof_sizeof;
     43 typedef typeof(sizeof(Enumerator)) typeof_sizeof2;
     44 
     45 // ArraySubscriptExpr
     46 extern double values[];
     47 typedef typeof(values[2]) array_subscript;
     48 
     49 // CallExpr
     50 double dplus(double x, double y);
     51 double d0, d1;
     52 typedef typeof((&dplus)(d0, d1)) call_returning_double;
     53 
     54 // MemberExpr
     55 struct S {
     56   double x;
     57 };
     58 typedef typeof(((struct S*)0)->x) member_ref_double;
     59 
     60 // BinaryOperator
     61 typedef typeof(i + Enumerator) add_result;
     62 
     63 // CompoundAssignOperator
     64 typedef typeof(i += Enumerator) addeq_result;
     65 
     66 // ConditionalOperator
     67 typedef typeof(i? : d0) conditional_operator;
     68 
     69 // CStyleCastExpr
     70 typedef typeof((void *)0) void_ptr;
     71 
     72 // CompoundLiteral
     73 typedef typeof((struct S){.x = 3.5}) compound_literal;
     74 
     75 typedef typeof(i + sizeof(int[i + Enumerator])) add_result_with_typeinfo;
     76 
     77 // ExtVectorElementExpr
     78 typedef __attribute__(( ext_vector_type(2) )) double double2;
     79 extern double2 vec2, vec2b;
     80 typedef typeof(vec2.x) ext_vector_element;
     81 
     82 // InitListExpr
     83 double double_array[3] = { 1.0, 2.0 };
     84 
     85 // DesignatedInitExpr
     86 struct {
     87   int x;
     88   float y;
     89 } designated_inits[3] = { [0].y = 17,
     90                           [2].x = 12.3, // expected-warning {{implicit conversion from 'double' to 'int' changes value from 12.3 to 12}}
     91                           3.5 };
     92 
     93 // TypesCompatibleExpr
     94 typedef typeof(__builtin_types_compatible_p(float, double)) types_compatible;
     95 
     96 // ChooseExpr
     97 typedef typeof(__builtin_choose_expr(17 > 19, d0, 1)) choose_expr;
     98 
     99 // GNUNullExpr FIXME: needs C++
    100 // typedef typeof(__null) null_type;
    101 
    102 // ShuffleVectorExpr
    103 typedef typeof(__builtin_shufflevector(vec2, vec2b, 2, 1)) shuffle_expr;
    104 
    105 // ConvertVectorExpr
    106 typedef __attribute__(( ext_vector_type(2) )) float float2;
    107 typedef typeof(__builtin_convertvector(vec2, float2)) convert_expr;
    108 
    109 // GenericSelectionExpr
    110 typedef typeof(_Generic(i, char*: 0, int: 0., default: hello))
    111   generic_selection_expr;
    112