brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.0 KiB · c4ff12d Raw
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