brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · 2daa56b Raw
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