484 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s2 3// Test this with PCH.4// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s5// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s6 7#ifndef PCH_HELPER8#define PCH_HELPER9 10void NormalFunc(int i, float f) {11 // CHECK: FunctionDecl{{.*}}NormalFunc12 // CHECK-NEXT: ParmVarDecl13 // CHECK-NEXT: ParmVarDecl14 // CHECK-NEXT: CompoundStmt15#pragma acc loop reduction(+: i)16 for(int i = 0; i < 5; ++i);17 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>18 // CHECK-NEXT: reduction clause Operator: +19 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'20 // CHECK-NEXT: ForStmt21 // CHECK-NEXT: DeclStmt22 // CHECK-NEXT: VarDecl{{.*}} i 'int'23 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 024 // CHECK-NEXT: <<<NULL>>>25 // CHECK-NEXT: BinaryOperator{{.*}}'<'26 // CHECK-NEXT: ImplicitCastExpr27 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'28 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 529 // CHECK-NEXT: UnaryOperator{{.*}}++30 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'31 // CHECK-NEXT: NullStmt32 33#pragma acc loop reduction(*: f)34 for(int i = 0; i < 5; ++i);35 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>36 // CHECK-NEXT: reduction clause Operator: *37 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'38 // CHECK-NEXT: ForStmt39 // CHECK-NEXT: DeclStmt40 // CHECK-NEXT: VarDecl{{.*}} i 'int'41 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 042 // CHECK-NEXT: <<<NULL>>>43 // CHECK-NEXT: BinaryOperator{{.*}}'<'44 // CHECK-NEXT: ImplicitCastExpr45 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'46 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 547 // CHECK-NEXT: UnaryOperator{{.*}}++48 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'49 // CHECK-NEXT: NullStmt50 51#pragma acc loop reduction(max: i)52 for(int i = 0; i < 5; ++i);53 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>54 // CHECK-NEXT: reduction clause Operator: max55 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'56 // CHECK-NEXT: ForStmt57 // CHECK-NEXT: DeclStmt58 // CHECK-NEXT: VarDecl{{.*}} i 'int'59 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 060 // CHECK-NEXT: <<<NULL>>>61 // CHECK-NEXT: BinaryOperator{{.*}}'<'62 // CHECK-NEXT: ImplicitCastExpr63 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'64 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 565 // CHECK-NEXT: UnaryOperator{{.*}}++66 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'67 // CHECK-NEXT: NullStmt68 69#pragma acc loop reduction(min: f)70 for(int i = 0; i < 5; ++i);71 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>72 // CHECK-NEXT: reduction clause Operator: min73 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'74 // CHECK-NEXT: ForStmt75 // CHECK-NEXT: DeclStmt76 // CHECK-NEXT: VarDecl{{.*}} i 'int'77 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 078 // CHECK-NEXT: <<<NULL>>>79 // CHECK-NEXT: BinaryOperator{{.*}}'<'80 // CHECK-NEXT: ImplicitCastExpr81 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'82 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 583 // CHECK-NEXT: UnaryOperator{{.*}}++84 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'85 // CHECK-NEXT: NullStmt86 87#pragma acc loop reduction(&: i)88 for(int i = 0; i < 5; ++i);89 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>90 // CHECK-NEXT: reduction clause Operator: &91 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'92 // CHECK-NEXT: ForStmt93 // CHECK-NEXT: DeclStmt94 // CHECK-NEXT: VarDecl{{.*}} i 'int'95 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 096 // CHECK-NEXT: <<<NULL>>>97 // CHECK-NEXT: BinaryOperator{{.*}}'<'98 // CHECK-NEXT: ImplicitCastExpr99 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'100 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5101 // CHECK-NEXT: UnaryOperator{{.*}}++102 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'103 // CHECK-NEXT: NullStmt104 105 106#pragma acc loop reduction(^: i)107 for(int i = 0; i < 5; ++i);108 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>109 // CHECK-NEXT: reduction clause Operator: ^110 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'111 // CHECK-NEXT: ForStmt112 // CHECK-NEXT: DeclStmt113 // CHECK-NEXT: VarDecl{{.*}} i 'int'114 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0115 // CHECK-NEXT: <<<NULL>>>116 // CHECK-NEXT: BinaryOperator{{.*}}'<'117 // CHECK-NEXT: ImplicitCastExpr118 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'119 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5120 // CHECK-NEXT: UnaryOperator{{.*}}++121 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'122 // CHECK-NEXT: NullStmt123 124#pragma acc loop reduction(&&: f)125 for(int i = 0; i < 5; ++i);126 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>127 // CHECK-NEXT: reduction clause Operator: &&128 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'129 // CHECK-NEXT: ForStmt130 // CHECK-NEXT: DeclStmt131 // CHECK-NEXT: VarDecl{{.*}} i 'int'132 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0133 // CHECK-NEXT: <<<NULL>>>134 // CHECK-NEXT: BinaryOperator{{.*}}'<'135 // CHECK-NEXT: ImplicitCastExpr136 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'137 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5138 // CHECK-NEXT: UnaryOperator{{.*}}++139 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'140 // CHECK-NEXT: NullStmt141 142 143#pragma acc loop reduction(||: i)144 for(int i = 0; i < 5; ++i);145 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>146 // CHECK-NEXT: reduction clause Operator: ||147 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'148 // CHECK-NEXT: ForStmt149 // CHECK-NEXT: DeclStmt150 // CHECK-NEXT: VarDecl{{.*}} i 'int'151 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0152 // CHECK-NEXT: <<<NULL>>>153 // CHECK-NEXT: BinaryOperator{{.*}}'<'154 // CHECK-NEXT: ImplicitCastExpr155 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'156 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5157 // CHECK-NEXT: UnaryOperator{{.*}}++158 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'159 // CHECK-NEXT: NullStmt160 }161 162template<typename T>163void TemplFunc() {164 // CHECK: FunctionTemplateDecl{{.*}}TemplFunc165 // CHECK-NEXT: TemplateTypeParmDecl166 167 // Match the prototype:168 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc169 // CHECK-NEXT: CompoundStmt170 171 T t;172 // CHECK-NEXT: DeclStmt173 // CHECK-NEXT: VarDecl{{.*}} t 'T'174 175#pragma acc loop reduction(+: t)176 for(int i = 0; i < 5; ++i);177 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>178 // CHECK-NEXT: reduction clause Operator: +179 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'180 // CHECK-NEXT: ForStmt181 // CHECK-NEXT: DeclStmt182 // CHECK-NEXT: VarDecl{{.*}} i 'int'183 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0184 // CHECK-NEXT: <<<NULL>>>185 // CHECK-NEXT: BinaryOperator{{.*}}'<'186 // CHECK-NEXT: ImplicitCastExpr187 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'188 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5189 // CHECK-NEXT: UnaryOperator{{.*}}++190 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'191 // CHECK-NEXT: NullStmt192 193#pragma acc loop reduction(*: T::SomeFloat)194 for(int i = 0; i < 5; ++i);195 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>196 // CHECK-NEXT: reduction clause Operator: *197 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue198 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'199 // CHECK-NEXT: ForStmt200 // CHECK-NEXT: DeclStmt201 // CHECK-NEXT: VarDecl{{.*}} i 'int'202 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0203 // CHECK-NEXT: <<<NULL>>>204 // CHECK-NEXT: BinaryOperator{{.*}}'<'205 // CHECK-NEXT: ImplicitCastExpr206 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'207 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5208 // CHECK-NEXT: UnaryOperator{{.*}}++209 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'210 // CHECK-NEXT: NullStmt211 212 typename T::IntTy i;213 // CHECK-NEXT: DeclStmt214 // CHECK-NEXT: VarDecl{{.*}} i 'typename T::IntTy'215 216#pragma acc loop reduction(max: i)217 for(int i = 0; i < 5; ++i);218 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>219 // CHECK-NEXT: reduction clause Operator: max220 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'221 // CHECK-NEXT: ForStmt222 // CHECK-NEXT: DeclStmt223 // CHECK-NEXT: VarDecl{{.*}} i 'int'224 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0225 // CHECK-NEXT: <<<NULL>>>226 // CHECK-NEXT: BinaryOperator{{.*}}'<'227 // CHECK-NEXT: ImplicitCastExpr228 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'229 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5230 // CHECK-NEXT: UnaryOperator{{.*}}++231 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'232 // CHECK-NEXT: NullStmt233 234#pragma acc loop reduction(min: t)235 for(int i = 0; i < 5; ++i);236 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>237 // CHECK-NEXT: reduction clause Operator: min238 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'239 // CHECK-NEXT: ForStmt240 // CHECK-NEXT: DeclStmt241 // CHECK-NEXT: VarDecl{{.*}} i 'int'242 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0243 // CHECK-NEXT: <<<NULL>>>244 // CHECK-NEXT: BinaryOperator{{.*}}'<'245 // CHECK-NEXT: ImplicitCastExpr246 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'247 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5248 // CHECK-NEXT: UnaryOperator{{.*}}++249 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'250 // CHECK-NEXT: NullStmt251 252#pragma acc loop reduction(|: i)253 for(int i = 0; i < 5; ++i);254 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>255 // CHECK-NEXT: reduction clause Operator: |256 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'257 // CHECK-NEXT: ForStmt258 // CHECK-NEXT: DeclStmt259 // CHECK-NEXT: VarDecl{{.*}} i 'int'260 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0261 // CHECK-NEXT: <<<NULL>>>262 // CHECK-NEXT: BinaryOperator{{.*}}'<'263 // CHECK-NEXT: ImplicitCastExpr264 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'265 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5266 // CHECK-NEXT: UnaryOperator{{.*}}++267 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'268 // CHECK-NEXT: NullStmt269 270#pragma acc loop reduction(^: t)271 for(int i = 0; i < 5; ++i);272 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>273 // CHECK-NEXT: reduction clause Operator: ^274 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'275 // CHECK-NEXT: ForStmt276 // CHECK-NEXT: DeclStmt277 // CHECK-NEXT: VarDecl{{.*}} i 'int'278 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0279 // CHECK-NEXT: <<<NULL>>>280 // CHECK-NEXT: BinaryOperator{{.*}}'<'281 // CHECK-NEXT: ImplicitCastExpr282 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'283 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5284 // CHECK-NEXT: UnaryOperator{{.*}}++285 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'286 // CHECK-NEXT: NullStmt287 288#pragma acc loop reduction(&&: T::SomeFloat)289 for(int i = 0; i < 5; ++i);290 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>291 // CHECK-NEXT: reduction clause Operator: &&292 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue293 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'294 // CHECK-NEXT: ForStmt295 // CHECK-NEXT: DeclStmt296 // CHECK-NEXT: VarDecl{{.*}} i 'int'297 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0298 // CHECK-NEXT: <<<NULL>>>299 // CHECK-NEXT: BinaryOperator{{.*}}'<'300 // CHECK-NEXT: ImplicitCastExpr301 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'302 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5303 // CHECK-NEXT: UnaryOperator{{.*}}++304 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'305 // CHECK-NEXT: NullStmt306 307#pragma acc loop reduction(||: i)308 for(int i = 0; i < 5; ++i);309 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>310 // CHECK-NEXT: reduction clause Operator: ||311 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'312 // CHECK-NEXT: ForStmt313 // CHECK-NEXT: DeclStmt314 // CHECK-NEXT: VarDecl{{.*}} i 'int'315 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0316 // CHECK-NEXT: <<<NULL>>>317 // CHECK-NEXT: BinaryOperator{{.*}}'<'318 // CHECK-NEXT: ImplicitCastExpr319 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'320 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5321 // CHECK-NEXT: UnaryOperator{{.*}}++322 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'323 // CHECK-NEXT: NullStmt324 325 // Match the instantiation:326 327 // CHECK: FunctionDecl{{.*}}TemplFunc 'void ()' implicit_instantiation328 // CHECK-NEXT: TemplateArgument type 'InstTy'329 // CHECK-NEXT: RecordType{{.*}} 'InstTy'330 // CHECK-NEXT: CXXRecord{{.*}} 'InstTy'331 // CHECK-NEXT: CompoundStmt332 //333 // CHECK-NEXT: DeclStmt334 // CHECK-NEXT: VarDecl{{.*}} used t 'InstTy'335 // CHECK-NEXT: CXXConstructExpr{{.*}} 'InstTy' 'void () noexcept'336 //337 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>338 // CHECK-NEXT: reduction clause Operator: +339 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'340 // CHECK-NEXT: ForStmt341 // CHECK-NEXT: DeclStmt342 // CHECK-NEXT: VarDecl{{.*}} i 'int'343 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0344 // CHECK-NEXT: <<<NULL>>>345 // CHECK-NEXT: BinaryOperator{{.*}}'<'346 // CHECK-NEXT: ImplicitCastExpr347 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'348 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5349 // CHECK-NEXT: UnaryOperator{{.*}}++350 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'351 // CHECK-NEXT: NullStmt352 //353 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>354 // CHECK-NEXT: reduction clause Operator: *355 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'356 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'357 // CHECK-NEXT: ForStmt358 // CHECK-NEXT: DeclStmt359 // CHECK-NEXT: VarDecl{{.*}} i 'int'360 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0361 // CHECK-NEXT: <<<NULL>>>362 // CHECK-NEXT: BinaryOperator{{.*}}'<'363 // CHECK-NEXT: ImplicitCastExpr364 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'365 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5366 // CHECK-NEXT: UnaryOperator{{.*}}++367 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'368 // CHECK-NEXT: NullStmt369 //370 // CHECK-NEXT: DeclStmt371 // CHECK-NEXT: VarDecl{{.*}} i 'typename InstTy::IntTy':'int'372 //373 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>374 // CHECK-NEXT: reduction clause Operator: max375 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'376 // CHECK-NEXT: ForStmt377 // CHECK-NEXT: DeclStmt378 // CHECK-NEXT: VarDecl{{.*}} i 'int'379 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0380 // CHECK-NEXT: <<<NULL>>>381 // CHECK-NEXT: BinaryOperator{{.*}}'<'382 // CHECK-NEXT: ImplicitCastExpr383 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'384 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5385 // CHECK-NEXT: UnaryOperator{{.*}}++386 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'387 // CHECK-NEXT: NullStmt388 //389 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>390 // CHECK-NEXT: reduction clause Operator: min391 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'392 // CHECK-NEXT: ForStmt393 // CHECK-NEXT: DeclStmt394 // CHECK-NEXT: VarDecl{{.*}} i 'int'395 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0396 // CHECK-NEXT: <<<NULL>>>397 // CHECK-NEXT: BinaryOperator{{.*}}'<'398 // CHECK-NEXT: ImplicitCastExpr399 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'400 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5401 // CHECK-NEXT: UnaryOperator{{.*}}++402 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'403 // CHECK-NEXT: NullStmt404 //405 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>406 // CHECK-NEXT: reduction clause Operator: |407 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'408 // CHECK-NEXT: ForStmt409 // CHECK-NEXT: DeclStmt410 // CHECK-NEXT: VarDecl{{.*}} i 'int'411 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0412 // CHECK-NEXT: <<<NULL>>>413 // CHECK-NEXT: BinaryOperator{{.*}}'<'414 // CHECK-NEXT: ImplicitCastExpr415 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'416 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5417 // CHECK-NEXT: UnaryOperator{{.*}}++418 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'419 // CHECK-NEXT: NullStmt420 //421 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>422 // CHECK-NEXT: reduction clause Operator: ^423 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'424 // CHECK-NEXT: ForStmt425 // CHECK-NEXT: DeclStmt426 // CHECK-NEXT: VarDecl{{.*}} i 'int'427 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0428 // CHECK-NEXT: <<<NULL>>>429 // CHECK-NEXT: BinaryOperator{{.*}}'<'430 // CHECK-NEXT: ImplicitCastExpr431 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'432 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5433 // CHECK-NEXT: UnaryOperator{{.*}}++434 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'435 // CHECK-NEXT: NullStmt436 //437 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>438 // CHECK-NEXT: reduction clause Operator: &&439 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'440 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'441 // CHECK-NEXT: ForStmt442 // CHECK-NEXT: DeclStmt443 // CHECK-NEXT: VarDecl{{.*}} i 'int'444 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0445 // CHECK-NEXT: <<<NULL>>>446 // CHECK-NEXT: BinaryOperator{{.*}}'<'447 // CHECK-NEXT: ImplicitCastExpr448 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'449 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5450 // CHECK-NEXT: UnaryOperator{{.*}}++451 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'452 // CHECK-NEXT: NullStmt453 //454 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>455 // CHECK-NEXT: reduction clause Operator: ||456 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'457 // CHECK-NEXT: ForStmt458 // CHECK-NEXT: DeclStmt459 // CHECK-NEXT: VarDecl{{.*}} i 'int'460 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0461 // CHECK-NEXT: <<<NULL>>>462 // CHECK-NEXT: BinaryOperator{{.*}}'<'463 // CHECK-NEXT: ImplicitCastExpr464 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'465 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5466 // CHECK-NEXT: UnaryOperator{{.*}}++467 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'468 // CHECK-NEXT: NullStmt469 470}471 472struct BoolConversion{ operator bool() const;};473struct InstTy {474 using IntTy = int;475 static constexpr float SomeFloat = 5.0;476 static constexpr BoolConversion BC;477};478 479void Instantiate() {480 TemplFunc<InstTy>();481}482 483#endif // PCH_HELPER484