1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu11 -ast-dump %s | FileCheck -strict-whitespace %s 2 3 void Comma(void) { 4 1, 2, 3; 5 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> 'int' ',' 6 // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:3, col:6> 'int' ',' 7 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:3> 'int' 1 8 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:6> 'int' 2 9 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:9> 'int' 3 10 } 11 12 void Assignment(int a) { 13 a = 12; 14 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '=' 15 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 16 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:7> 'int' 12 17 18 a += a; 19 // CHECK: CompoundAssignOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '+=' ComputeLHSTy='int' ComputeResultTy='int' 20 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 21 // CHECK-NEXT: ImplicitCastExpr 22 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 23 } 24 25 void Conditionals(int a) { 26 a ? 0 : 1; 27 // CHECK: ConditionalOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> 'int' 28 // CHECK-NEXT: ImplicitCastExpr 29 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 30 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:7> 'int' 0 31 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 1 32 33 a ?: 0; 34 // CHECK: BinaryConditionalOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' 35 // CHECK-NEXT: ImplicitCastExpr 36 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 37 // CHECK-NEXT: OpaqueValueExpr 0x{{[^ ]*}} <col:3> 'int' 38 // CHECK-NEXT: ImplicitCastExpr 39 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 40 // CHECK-NEXT: OpaqueValueExpr 0x{{[^ ]*}} <col:3> 'int' 41 // CHECK-NEXT: ImplicitCastExpr 42 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 43 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 0 44 } 45 46 void BinaryOperators(int a, int b) { 47 // Logical operators 48 a || b; 49 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '||' 50 // CHECK-NEXT: ImplicitCastExpr 51 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 52 // CHECK-NEXT: ImplicitCastExpr 53 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 54 55 a && b; 56 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '&&' 57 // CHECK-NEXT: ImplicitCastExpr 58 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 59 // CHECK-NEXT: ImplicitCastExpr 60 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 61 62 // Bitwise operators 63 a | b; 64 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '|' 65 // CHECK-NEXT: ImplicitCastExpr 66 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 67 // CHECK-NEXT: ImplicitCastExpr 68 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 69 70 a ^ b; 71 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '^' 72 // CHECK-NEXT: ImplicitCastExpr 73 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 74 // CHECK-NEXT: ImplicitCastExpr 75 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 76 77 a & b; 78 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '&' 79 // CHECK-NEXT: ImplicitCastExpr 80 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 81 // CHECK-NEXT: ImplicitCastExpr 82 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 83 84 // Equality operators 85 a == b; 86 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '==' 87 // CHECK-NEXT: ImplicitCastExpr 88 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 89 // CHECK-NEXT: ImplicitCastExpr 90 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 91 92 a != b; 93 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '!=' 94 // CHECK-NEXT: ImplicitCastExpr 95 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 96 // CHECK-NEXT: ImplicitCastExpr 97 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 98 99 // Relational operators 100 a < b; 101 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '<' 102 // CHECK-NEXT: ImplicitCastExpr 103 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 104 // CHECK-NEXT: ImplicitCastExpr 105 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 106 107 a > b; 108 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '>' 109 // CHECK-NEXT: ImplicitCastExpr 110 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 111 // CHECK-NEXT: ImplicitCastExpr 112 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 113 114 a <= b; 115 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '<=' 116 // CHECK-NEXT: ImplicitCastExpr 117 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 118 // CHECK-NEXT: ImplicitCastExpr 119 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 120 121 a >= b; 122 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '>=' 123 // CHECK-NEXT: ImplicitCastExpr 124 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 125 // CHECK-NEXT: ImplicitCastExpr 126 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 127 128 // Bit shifting operators 129 a << b; 130 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '<<' 131 // CHECK-NEXT: ImplicitCastExpr 132 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 133 // CHECK-NEXT: ImplicitCastExpr 134 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 135 136 a >> b; 137 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '>>' 138 // CHECK-NEXT: ImplicitCastExpr 139 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 140 // CHECK-NEXT: ImplicitCastExpr 141 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 142 143 // Additive operators 144 a + b; 145 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '+' 146 // CHECK-NEXT: ImplicitCastExpr 147 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 148 // CHECK-NEXT: ImplicitCastExpr 149 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 150 151 a - b; 152 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '-' 153 // CHECK-NEXT: ImplicitCastExpr 154 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 155 // CHECK-NEXT: ImplicitCastExpr 156 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 157 158 // Multiplicative operators 159 a * b; 160 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '*' 161 // CHECK-NEXT: ImplicitCastExpr 162 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 163 // CHECK-NEXT: ImplicitCastExpr 164 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 165 166 a / b; 167 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '/' 168 // CHECK-NEXT: ImplicitCastExpr 169 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 170 // CHECK-NEXT: ImplicitCastExpr 171 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 172 173 a % b; 174 // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '%' 175 // CHECK-NEXT: ImplicitCastExpr 176 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 177 // CHECK-NEXT: ImplicitCastExpr 178 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' 179 } 180 181 void UnaryOperators(int a, int *b) { 182 // Cast operators 183 (float)a; 184 // CHECK: CStyleCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:10> 'float' <IntegralToFloating> 185 // CHECK-NEXT: ImplicitCastExpr 186 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 187 188 // ++, --, and ~ are covered elsewhere. 189 190 -a; 191 // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '-' 192 // CHECK-NEXT: ImplicitCastExpr 193 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 194 195 +a; 196 // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '+' cannot overflow 197 // CHECK-NEXT: ImplicitCastExpr 198 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 199 200 &a; 201 // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int *' prefix '&' cannot overflow 202 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 203 204 *b; 205 // CHECK: ImplicitCastExpr 206 // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:3, col:4> 'int' lvalue prefix '*' cannot overflow 207 // CHECK-NEXT: ImplicitCastExpr 208 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int *' 209 210 !a; 211 // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '!' cannot overflow 212 // CHECK-NEXT: ImplicitCastExpr 213 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 214 215 sizeof a; 216 // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:10> 'unsigned long' sizeof 217 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 218 219 sizeof(int); 220 // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:13> 'unsigned long' sizeof 'int' 221 222 _Alignof(int); 223 // FIXME: Uses C++ spelling for alignof in C mode. 224 // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-2]]:3, col:15> 'unsigned long' alignof 'int' 225 } 226 227 struct S { 228 int a; 229 }; 230 231 void PostfixOperators(int *a, struct S b, struct S *c) { 232 a[0]; 233 // CHECK: ImplicitCastExpr 234 // CHECK-NEXT: ArraySubscriptExpr 0x{{[^ ]*}} <col:3, col:6> 'int' lvalue 235 // CHECK-NEXT: ImplicitCastExpr 236 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' 237 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:5> 'int' 0 238 239 UnaryOperators(*a, a); 240 // CHECK: CallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:23> 'void' 241 // CHECK-NEXT: ImplicitCastExpr 242 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'void (int, int *)' Function 0x{{[^ ]*}} 'UnaryOperators' 'void (int, int *)' 243 // CHECK-NEXT: ImplicitCastExpr 244 // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:18, col:19> 'int' lvalue prefix '*' cannot overflow 245 // CHECK-NEXT: ImplicitCastExpr 246 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:19> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' 247 // CHECK-NEXT: ImplicitCastExpr 248 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:22> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' 249 250 b.a; 251 // CHECK: ImplicitCastExpr 252 // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:5> 'int' lvalue .a 0x{{[^ ]*}} 253 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'struct S':'struct S' lvalue ParmVar 0x{{[^ ]*}} 'b' 'struct S':'struct S' 254 255 c->a; 256 // CHECK: ImplicitCastExpr 257 // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:6> 'int' lvalue ->a 0x{{[^ ]*}} 258 // CHECK: ImplicitCastExpr 259 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'struct S *' lvalue ParmVar 0x{{[^ ]*}} 'c' 'struct S *' 260 261 // Postfix ++ and -- are covered elsewhere. 262 263 (int [4]){1, 2, 3, 4, }; 264 // CHECK: ImplicitCastExpr 265 // CHECK-NEXT: CompoundLiteralExpr 0x{{[^ ]*}} <col:3, col:25> 'int [4]' lvalue 266 // CHECK-NEXT: InitListExpr 0x{{[^ ]*}} <col:12, col:25> 'int [4]' 267 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:13> 'int' 1 268 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:16> 'int' 2 269 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:19> 'int' 3 270 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:22> 'int' 4 271 272 (struct S){1}; 273 // CHECK: ImplicitCastExpr 274 // CHECK-NEXT: CompoundLiteralExpr 0x{{[^ ]*}} <col:3, col:15> 'struct S':'struct S' lvalue 275 // CHECK-NEXT: InitListExpr 0x{{[^ ]*}} <col:13, col:15> 'struct S':'struct S' 276 // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:14> 'int' 1 277 } 278 279 enum E { One }; 280 281 void PrimaryExpressions(int a) { 282 a; 283 // CHECK: ImplicitCastExpr 284 // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 285 286 'a'; 287 // CHECK: CharacterLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 97 288 289 L'a'; 290 // CHECK: CharacterLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 97 291 292 "a"; 293 // ImplicitCastExpr 294 // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'char [2]' lvalue "a" 295 296 L"a"; 297 // ImplicitCastExpr 298 // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'int [2]' lvalue L"a" 299 300 u8"a"; 301 // ImplicitCastExpr 302 // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'char [2]' lvalue u8"a" 303 304 U"a"; 305 // ImplicitCastExpr 306 // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'unsigned int [2]' lvalue U"a" 307 308 u"a"; 309 // ImplicitCastExpr 310 // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'unsigned short [2]' lvalue u"a" 311 312 1; 313 // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 1 314 315 1u; 316 // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'unsigned int' 1 317 318 1ll; 319 // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'long long' 1 320 321 1.0; 322 // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'double' {{1\.[0]*e[\+]?[0]+}} 323 324 1.0f; 325 // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'float' {{1\.[0]*e[\+]?[0]+}} 326 327 1.0l; 328 // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'long double' {{1\.[0]*e[\+]?[0]+}} 329 330 One; 331 // CHECK: DeclRefExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' EnumConstant 0x{{[^ ]*}} 'One' 'int' 332 333 (a); 334 // CHECK: ImplicitCastExpr 335 // CHECK-NEXT: ParenExpr 0x{{[^ ]*}} <col:3, col:5> 'int' lvalue 336 // CHECK: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' 337 338 // Generic selection expressions are covered elsewhere. 339 } 340