501 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_HELPER9void NormalFunc(int i, float f) {10 // CHECK: FunctionDecl{{.*}}NormalFunc11 // CHECK-NEXT: ParmVarDecl12 // CHECK-NEXT: ParmVarDecl13 // CHECK-NEXT: CompoundStmt14#pragma acc parallel default(none)15 while(true);16 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel17 // CHECK-NEXT: default(none)18 // CHECK-NEXT: WhileStmt19 // CHECK-NEXT: CXXBoolLiteralExpr20 // CHECK-NEXT: NullStmt21 22#pragma acc serial default(present)23 while(true);24 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial25 // CHECK-NEXT: default(present)26 // CHECK-NEXT: WhileStmt27 // CHECK-NEXT: CXXBoolLiteralExpr28 // CHECK-NEXT: NullStmt29 30#pragma acc kernels if( i < f)31 while(true);32 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels33 // CHECK-NEXT: if clause34 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'35 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <IntegralToFloating>36 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>37 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'38 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>39 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'40 // CHECK-NEXT: WhileStmt41 // CHECK-NEXT: CXXBoolLiteralExpr42 // CHECK-NEXT: NullStmt43 44#pragma acc parallel reduction(+: i)45 while(true);46 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel47 // CHECK-NEXT: reduction clause Operator: +48 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'49 // CHECK-NEXT: WhileStmt50 // CHECK-NEXT: CXXBoolLiteralExpr51 // CHECK-NEXT: NullStmt52 53#pragma acc serial reduction(*: f)54 while(true);55 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial56 // CHECK-NEXT: reduction clause Operator: *57 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'58 // CHECK-NEXT: WhileStmt59 // CHECK-NEXT: CXXBoolLiteralExpr60 // CHECK-NEXT: NullStmt61 62#pragma acc parallel reduction(max: i)63 while(true);64 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel65 // CHECK-NEXT: reduction clause Operator: max66 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'67 // CHECK-NEXT: WhileStmt68 // CHECK-NEXT: CXXBoolLiteralExpr69 // CHECK-NEXT: NullStmt70 71#pragma acc serial reduction(min: f)72 while(true);73 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial74 // CHECK-NEXT: reduction clause Operator: min75 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'76 // CHECK-NEXT: WhileStmt77 // CHECK-NEXT: CXXBoolLiteralExpr78 // CHECK-NEXT: NullStmt79 80#pragma acc parallel reduction(&: i)81 while(true);82 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel83 // CHECK-NEXT: reduction clause Operator: &84 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'85 // CHECK-NEXT: WhileStmt86 // CHECK-NEXT: CXXBoolLiteralExpr87 // CHECK-NEXT: NullStmt88 89 90#pragma acc parallel reduction(^: i)91 while(true);92 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel93 // CHECK-NEXT: reduction clause Operator: ^94 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'95 // CHECK-NEXT: WhileStmt96 // CHECK-NEXT: CXXBoolLiteralExpr97 // CHECK-NEXT: NullStmt98 99#pragma acc serial reduction(&&: f)100 while(true);101 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial102 // CHECK-NEXT: reduction clause Operator: &&103 // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'104 // CHECK-NEXT: WhileStmt105 // CHECK-NEXT: CXXBoolLiteralExpr106 // CHECK-NEXT: NullStmt107 108 109#pragma acc parallel reduction(||: i)110 while(true);111 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel112 // CHECK-NEXT: reduction clause Operator: ||113 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'114 // CHECK-NEXT: WhileStmt115 // CHECK-NEXT: CXXBoolLiteralExpr116 // CHECK-NEXT: NullStmt117}118 119template<typename T>120void TemplFunc() {121 // CHECK: FunctionTemplateDecl{{.*}}TemplFunc122 // CHECK-NEXT: TemplateTypeParmDecl123 124 // Match the prototype:125 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc126 // CHECK-NEXT: CompoundStmt127 128#pragma acc kernels default(none)129 while(true);130 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels131 // CHECK-NEXT: default(none)132 // CHECK-NEXT: WhileStmt133 // CHECK-NEXT: CXXBoolLiteralExpr134 // CHECK-NEXT: NullStmt135 136#pragma acc parallel default(present)137 while(true);138 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel139 // CHECK-NEXT: default(present)140 // CHECK-NEXT: WhileStmt141 // CHECK-NEXT: CXXBoolLiteralExpr142 // CHECK-NEXT: NullStmt143 144#pragma acc parallel if(T::SomeFloat < typename T::IntTy{})145 while(true);146 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel147 // CHECK-NEXT: if clause148 // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'149 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue150 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'151 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy'152 // CHECK-NEXT: InitListExpr{{.*}} 'void'153 // CHECK-NEXT: WhileStmt154 // CHECK-NEXT: CXXBoolLiteralExpr155 // CHECK-NEXT: NullStmt156 157#pragma acc serial if(typename T::IntTy{})158 while(true);159 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial160 // CHECK-NEXT: if clause161 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy'162 // CHECK-NEXT: InitListExpr{{.*}} 'void'163 // CHECK-NEXT: WhileStmt164 // CHECK-NEXT: CXXBoolLiteralExpr165 // CHECK-NEXT: NullStmt166 167#pragma acc kernels if(T::SomeFloat)168 while(true);169 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels170 // CHECK-NEXT: if clause171 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue172 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'173 // CHECK-NEXT: WhileStmt174 // CHECK-NEXT: CXXBoolLiteralExpr175 // CHECK-NEXT: NullStmt176 177#pragma acc parallel if(T::BC)178 while(true);179 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel180 // CHECK-NEXT: if clause181 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue182 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'183 // CHECK-NEXT: WhileStmt184 // CHECK-NEXT: CXXBoolLiteralExpr185 // CHECK-NEXT: NullStmt186 187#pragma acc serial self188 while(true);189 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial190 // CHECK-NEXT: self clause191 // CHECK-NEXT: <<<NULL>>192 // CHECK-NEXT: WhileStmt193 // CHECK-NEXT: CXXBoolLiteralExpr194 // CHECK-NEXT: NullStmt195 196#pragma acc kernels self(T::SomeFloat)197 while(true);198 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels199 // CHECK-NEXT: self clause200 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue201 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'202 // CHECK-NEXT: WhileStmt203 // CHECK-NEXT: CXXBoolLiteralExpr204 // CHECK-NEXT: NullStmt205 206#pragma acc parallel self(T::SomeFloat) if (T::SomeFloat)207 while(true);208 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel209 // CHECK-NEXT: self clause210 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue211 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'212 // CHECK-NEXT: if clause213 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue214 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'215 // CHECK-NEXT: WhileStmt216 // CHECK-NEXT: CXXBoolLiteralExpr217 // CHECK-NEXT: NullStmt218 219#pragma acc serial if(T::SomeFloat) self(T::SomeFloat)220 while(true);221 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial222 // CHECK-NEXT: if clause223 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue224 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'225 // CHECK-NEXT: self clause226 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue227 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'228 // CHECK-NEXT: WhileStmt229 // CHECK-NEXT: CXXBoolLiteralExpr230 // CHECK-NEXT: NullStmt231 232 T t;233 // CHECK-NEXT: DeclStmt234 // CHECK-NEXT: VarDecl{{.*}} t 'T'235 236#pragma acc parallel reduction(+: t)237 while(true);238 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel239 // CHECK-NEXT: reduction clause Operator: +240 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'241 // CHECK-NEXT: WhileStmt242 // CHECK-NEXT: CXXBoolLiteralExpr243 // CHECK-NEXT: NullStmt244 245#pragma acc serial reduction(*: T::SomeFloat)246 while(true);247 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial248 // CHECK-NEXT: reduction clause Operator: *249 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue250 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'251 // CHECK-NEXT: WhileStmt252 // CHECK-NEXT: CXXBoolLiteralExpr253 // CHECK-NEXT: NullStmt254 255 typename T::IntTy i;256 // CHECK-NEXT: DeclStmt257 // CHECK-NEXT: VarDecl{{.*}} i 'typename T::IntTy'258 259#pragma acc parallel reduction(max: i)260 while(true);261 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel262 // CHECK-NEXT: reduction clause Operator: max263 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'264 // CHECK-NEXT: WhileStmt265 // CHECK-NEXT: CXXBoolLiteralExpr266 // CHECK-NEXT: NullStmt267 268#pragma acc serial reduction(min: t)269 while(true);270 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial271 // CHECK-NEXT: reduction clause Operator: min272 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'273 // CHECK-NEXT: WhileStmt274 // CHECK-NEXT: CXXBoolLiteralExpr275 // CHECK-NEXT: NullStmt276 277#pragma acc serial reduction(|: i)278 while(true);279 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial280 // CHECK-NEXT: reduction clause Operator: |281 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'282 // CHECK-NEXT: WhileStmt283 // CHECK-NEXT: CXXBoolLiteralExpr284 // CHECK-NEXT: NullStmt285 286#pragma acc parallel reduction(^: t)287 while(true);288 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel289 // CHECK-NEXT: reduction clause Operator: ^290 // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'291 // CHECK-NEXT: WhileStmt292 // CHECK-NEXT: CXXBoolLiteralExpr293 // CHECK-NEXT: NullStmt294 295#pragma acc serial reduction(&&: T::SomeFloat)296 while(true);297 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial298 // CHECK-NEXT: reduction clause Operator: &&299 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue300 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'301 // CHECK-NEXT: WhileStmt302 // CHECK-NEXT: CXXBoolLiteralExpr303 // CHECK-NEXT: NullStmt304 305#pragma acc parallel reduction(||: i)306 while(true);307 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel308 // CHECK-NEXT: reduction clause Operator: ||309 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'310 // CHECK-NEXT: WhileStmt311 // CHECK-NEXT: CXXBoolLiteralExpr312 // CHECK-NEXT: NullStmt313 314 // Match the instantiation:315 // CHECK: FunctionDecl{{.*}}TemplFunc{{.*}}implicit_instantiation316 // CHECK-NEXT: TemplateArgument type 'InstTy'317 // CHECK-NEXT: RecordType{{.*}} 'InstTy'318 // CHECK-NEXT: CXXRecord{{.*}} 'InstTy'319 // CHECK-NEXT: CompoundStmt320 321 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels322 // CHECK-NEXT: default(none)323 // CHECK-NEXT: WhileStmt324 // CHECK-NEXT: CXXBoolLiteralExpr325 // CHECK-NEXT: NullStmt326 327 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel328 // CHECK-NEXT: default(present)329 // CHECK-NEXT: WhileStmt330 // CHECK-NEXT: CXXBoolLiteralExpr331 // CHECK-NEXT: NullStmt332 333 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel334 // CHECK-NEXT: if clause335 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'336 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>337 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'338 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'339 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <IntegralToFloating>340 // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename InstTy::IntTy <NoOp>341 // CHECK-NEXT: InitListExpr {{.*}}'typename InstTy::IntTy':'int'342 // CHECK-NEXT: WhileStmt343 // CHECK-NEXT: CXXBoolLiteralExpr344 // CHECK-NEXT: NullStmt345 346 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial347 // CHECK-NEXT: if clause348 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <IntegralToBoolean>349 // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename InstTy::IntTy <NoOp>350 // CHECK-NEXT: InitListExpr {{.*}}'typename InstTy::IntTy':'int'351 // CHECK-NEXT: WhileStmt352 // CHECK-NEXT: CXXBoolLiteralExpr353 // CHECK-NEXT: NullStmt354 355 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels356 // CHECK-NEXT: if clause357 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>358 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>359 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'360 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'361 // CHECK-NEXT: WhileStmt362 // CHECK-NEXT: CXXBoolLiteralExpr363 // CHECK-NEXT: NullStmt364 365 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel366 // CHECK-NEXT: if clause367 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'bool' <UserDefinedConversion>368 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'bool'369 // CHECK-NEXT: MemberExpr{{.*}} .operator bool370 // CHECK-NEXT: DeclRefExpr{{.*}} 'const BoolConversion' lvalue Var{{.*}} 'BC' 'const BoolConversion'371 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'372 // CHECK-NEXT: WhileStmt373 // CHECK-NEXT: CXXBoolLiteralExpr374 // CHECK-NEXT: NullStmt375 376 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial377 // CHECK-NEXT: self clause378 // CHECK-NEXT: <<<NULL>>379 // CHECK-NEXT: WhileStmt380 // CHECK-NEXT: CXXBoolLiteralExpr381 // CHECK-NEXT: NullStmt382 383 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels384 // CHECK-NEXT: self clause385 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>386 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>387 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'388 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'389 // CHECK-NEXT: WhileStmt390 // CHECK-NEXT: CXXBoolLiteralExpr391 // CHECK-NEXT: NullStmt392 393 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel394 // CHECK-NEXT: self clause395 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>396 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>397 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'398 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'399 // CHECK-NEXT: if clause400 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>401 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>402 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'403 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'404 // CHECK-NEXT: WhileStmt405 // CHECK-NEXT: CXXBoolLiteralExpr406 // CHECK-NEXT: NullStmt407 408 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial409 // CHECK-NEXT: if clause410 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>411 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>412 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'413 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'414 // CHECK-NEXT: self clause415 // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>416 // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>417 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'418 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'419 // CHECK-NEXT: WhileStmt420 // CHECK-NEXT: CXXBoolLiteralExpr421 // CHECK-NEXT: NullStmt422 423 // CHECK-NEXT: DeclStmt424 // CHECK-NEXT: VarDecl{{.*}} t 'InstTy'425 // CHECK-NEXT: CXXConstructExpr426 427 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel428 // CHECK-NEXT: reduction clause Operator: +429 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'430 // CHECK-NEXT: WhileStmt431 // CHECK-NEXT: CXXBoolLiteralExpr432 // CHECK-NEXT: NullStmt433 434 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial435 // CHECK-NEXT: reduction clause Operator: *436 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'437 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'438 // CHECK-NEXT: WhileStmt439 // CHECK-NEXT: CXXBoolLiteralExpr440 // CHECK-NEXT: NullStmt441 442 // CHECK-NEXT: DeclStmt443 // CHECK-NEXT: VarDecl{{.*}} i 'typename InstTy::IntTy':'int'444 445 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel446 // CHECK-NEXT: reduction clause Operator: max447 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'448 // CHECK-NEXT: WhileStmt449 // CHECK-NEXT: CXXBoolLiteralExpr450 // CHECK-NEXT: NullStmt451 452 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial453 // CHECK-NEXT: reduction clause Operator: min454 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'455 // CHECK-NEXT: WhileStmt456 // CHECK-NEXT: CXXBoolLiteralExpr457 // CHECK-NEXT: NullStmt458 459 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial460 // CHECK-NEXT: reduction clause Operator: |461 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'462 // CHECK-NEXT: WhileStmt463 // CHECK-NEXT: CXXBoolLiteralExpr464 // CHECK-NEXT: NullStmt465 466 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel467 // CHECK-NEXT: reduction clause Operator: ^468 // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'469 // CHECK-NEXT: WhileStmt470 // CHECK-NEXT: CXXBoolLiteralExpr471 // CHECK-NEXT: NullStmt472 473 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}serial474 // CHECK-NEXT: reduction clause Operator: &&475 // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'476 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'477 // CHECK-NEXT: WhileStmt478 // CHECK-NEXT: CXXBoolLiteralExpr479 // CHECK-NEXT: NullStmt480 481 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel482 // CHECK-NEXT: reduction clause Operator: ||483 // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'484 // CHECK-NEXT: WhileStmt485 // CHECK-NEXT: CXXBoolLiteralExpr486 // CHECK-NEXT: NullStmt487 488}489 490struct BoolConversion{ operator bool() const;};491struct InstTy {492 using IntTy = int;493 static constexpr float SomeFloat = 5.0;494 static constexpr BoolConversion BC;495};496 497void Instantiate() {498 TemplFunc<InstTy>();499}500#endif501