brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.9 KiB · 43cc55a Raw
567 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 10constexpr int returns_3() { return 3; }11 12void Func(int i, int j) {13  // CHECK: FunctionDecl{{.*}}Func14  // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'15  // CHECK-NEXT: ParmVarDecl{{.*}} j 'int'16  // CHECK-NEXT: CompoundStmt17  int array[5];18  // CHECK-NEXT: DeclStmt19  // CHECK-NEXT: VarDecl{{.*}} array 'int[5]'20  int VLA[i];21  // CHECK-NEXT: DeclStmt22  // CHECK-NEXT: VarDecl{{.*}} VLA 'int[i]'23  int *ptr;24  // CHECK-NEXT: DeclStmt25  // CHECK-NEXT: VarDecl{{.*}} ptr 'int *'26 27#pragma acc parallel private(array[returns_3():])28  while (true);29  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel30  // CHECK-NEXT: private clause31  // CHECK-NEXT: ArraySectionExpr32  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>33  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'34  // CHECK-NEXT: CallExpr{{.*}} 'int'35  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>36  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'37  // CHECK-NEXT: <<<NULL>>>38  // CHECK-NEXT: WhileStmt39  // CHECK-NEXT: CXXBoolLiteralExpr40  // CHECK-NEXT: NullStmt41 42#pragma acc parallel private(array[:1])43  while (true);44  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel45  // CHECK-NEXT: private clause46  // CHECK-NEXT: ArraySectionExpr47  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>48  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'49  // CHECK-NEXT: <<<NULL>>>50  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 151  // CHECK-NEXT: WhileStmt52  // CHECK-NEXT: CXXBoolLiteralExpr53  // CHECK-NEXT: NullStmt54 55#pragma acc parallel private(array[returns_3():1])56  while (true);57  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel58  // CHECK-NEXT: private clause59  // CHECK-NEXT: ArraySectionExpr60  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>61  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'62  // CHECK-NEXT: CallExpr{{.*}} 'int'63  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>64  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'65  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 166  // CHECK-NEXT: WhileStmt67  // CHECK-NEXT: CXXBoolLiteralExpr68  // CHECK-NEXT: NullStmt69 70#pragma acc parallel private(array[i:j])71  while (true);72  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel73  // CHECK-NEXT: private clause74  // CHECK-NEXT: ArraySectionExpr75  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>76  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'77  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>78  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'79  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>80  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'81  // CHECK-NEXT: WhileStmt82  // CHECK-NEXT: CXXBoolLiteralExpr83  // CHECK-NEXT: NullStmt84 85#pragma acc parallel private(VLA[:1])86  while (true);87  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel88  // CHECK-NEXT: private clause89  // CHECK-NEXT: ArraySectionExpr90  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>91  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'92  // CHECK-NEXT: <<<NULL>>>93  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 194  // CHECK-NEXT: WhileStmt95  // CHECK-NEXT: CXXBoolLiteralExpr96  // CHECK-NEXT: NullStmt97 98#pragma acc parallel private(VLA[returns_3():1])99  while (true);100  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel101  // CHECK-NEXT: private clause102  // CHECK-NEXT: ArraySectionExpr103  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>104  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'105  // CHECK-NEXT: CallExpr{{.*}}'int'106  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>107  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'108  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1109  // CHECK-NEXT: WhileStmt110  // CHECK-NEXT: CXXBoolLiteralExpr111  // CHECK-NEXT: NullStmt112 113#pragma acc parallel private(VLA[i:j])114  while (true);115  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel116  // CHECK-NEXT: private clause117  // CHECK-NEXT: ArraySectionExpr118  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>119  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'120  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>121  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'122  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>123  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'124  // CHECK-NEXT: WhileStmt125  // CHECK-NEXT: CXXBoolLiteralExpr126  // CHECK-NEXT: NullStmt127 128#pragma acc parallel private(ptr[:1])129  while (true);130  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel131  // CHECK-NEXT: private clause132  // CHECK-NEXT: ArraySectionExpr133  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>134  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'135  // CHECK-NEXT: <<<NULL>>>136  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1137  // CHECK-NEXT: WhileStmt138  // CHECK-NEXT: CXXBoolLiteralExpr139  // CHECK-NEXT: NullStmt140 141#pragma acc parallel private(ptr[returns_3():1])142  while (true);143  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel144  // CHECK-NEXT: private clause145  // CHECK-NEXT: ArraySectionExpr146  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>147  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'148  // CHECK-NEXT: CallExpr{{.*}}'int'149  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>150  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'151  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1152  // CHECK-NEXT: WhileStmt153  // CHECK-NEXT: CXXBoolLiteralExpr154  // CHECK-NEXT: NullStmt155 156#pragma acc parallel private(ptr[i:j])157  while (true);158  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel159  // CHECK-NEXT: private clause160  // CHECK-NEXT: ArraySectionExpr161  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>162  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'163  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>164  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'165  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>166  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'167  // CHECK-NEXT: WhileStmt168  // CHECK-NEXT: CXXBoolLiteralExpr169  // CHECK-NEXT: NullStmt170}171 172template<typename T, unsigned I, auto &CEArray>173void Templ(int i){174  // CHECK-NEXT: FunctionTemplateDecl{{.*}}Templ175  // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 T176  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I177  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray178  // CHECK-NEXT: FunctionDecl{{.*}}Templ 'void (int)'179  // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'180  // CHECK-NEXT: CompoundStmt181  T array[I+2];182  // CHECK-NEXT: DeclStmt183  // CHECK-NEXT: VarDecl{{.*}} array 'T[I + 2]'184  T VLA[i];185  // CHECK-NEXT: DeclStmt186  // CHECK-NEXT: VarDecl{{.*}} VLA 'T[i]'187  T *ptr;188  // CHECK-NEXT: DeclStmt189  // CHECK-NEXT: VarDecl{{.*}} ptr 'T *'190 191#pragma acc parallel private(array[returns_3():])192  while (true);193  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel194  // CHECK-NEXT: private clause195  // CHECK-NEXT: ArraySectionExpr196  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'197  // CHECK-NEXT: CallExpr{{.*}} 'int'198  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>199  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}}'returns_3' 'int ()'200  // CHECK-NEXT: <<<NULL>>>201  // CHECK-NEXT: WhileStmt202  // CHECK-NEXT: CXXBoolLiteralExpr203  // CHECK-NEXT: NullStmt204 205#pragma acc parallel private(array[:I])206  while (true);207  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel208  // CHECK-NEXT: private clause209  // CHECK-NEXT: ArraySectionExpr210  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'211  // CHECK-NEXT: <<<NULL>>>212  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'213  // CHECK-NEXT: WhileStmt214  // CHECK-NEXT: CXXBoolLiteralExpr215  // CHECK-NEXT: NullStmt216 217#pragma acc parallel private(array[returns_3()-2:I])218  while (true);219  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel220  // CHECK-NEXT: private clause221  // CHECK-NEXT: ArraySectionExpr222  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'223  // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'224  // CHECK-NEXT: CallExpr{{.*}} 'int'225  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>226  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'227  // CHECK-NEXT: IntegerLiteral{{.*}} 2228  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'229  // CHECK-NEXT: WhileStmt230  // CHECK-NEXT: CXXBoolLiteralExpr231  // CHECK-NEXT: NullStmt232 233#pragma acc parallel private(array[i:i])234  while (true);235  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel236  // CHECK-NEXT: private clause237  // CHECK-NEXT: ArraySectionExpr238  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'239  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>240  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'241  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>242  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'243  // CHECK-NEXT: WhileStmt244  // CHECK-NEXT: CXXBoolLiteralExpr245  // CHECK-NEXT: NullStmt246 247#pragma acc parallel private(VLA[:I])248  while (true);249  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel250  // CHECK-NEXT: private clause251  // CHECK-NEXT: ArraySectionExpr252  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'253  // CHECK-NEXT: <<<NULL>>>254  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'255  // CHECK-NEXT: WhileStmt256  // CHECK-NEXT: CXXBoolLiteralExpr257  // CHECK-NEXT: NullStmt258 259#pragma acc parallel private(VLA[returns_3():I])260  while (true);261  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel262  // CHECK-NEXT: private clause263  // CHECK-NEXT: ArraySectionExpr264  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'265  // CHECK-NEXT: CallExpr{{.*}}'int'266  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>267  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'268  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'269  // CHECK-NEXT: WhileStmt270  // CHECK-NEXT: CXXBoolLiteralExpr271  // CHECK-NEXT: NullStmt272 273#pragma acc parallel private(VLA[i:i])274  while (true);275  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel276  // CHECK-NEXT: private clause277  // CHECK-NEXT: ArraySectionExpr278  // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'279  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>280  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'281  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>282  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'283  // CHECK-NEXT: WhileStmt284  // CHECK-NEXT: CXXBoolLiteralExpr285  // CHECK-NEXT: NullStmt286 287#pragma acc parallel private(ptr[:I])288  while (true);289  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel290  // CHECK-NEXT: private clause291  // CHECK-NEXT: ArraySectionExpr292  // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'293  // CHECK-NEXT: <<<NULL>>>294  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'295  // CHECK-NEXT: WhileStmt296  // CHECK-NEXT: CXXBoolLiteralExpr297  // CHECK-NEXT: NullStmt298 299#pragma acc parallel private(ptr[returns_3():I])300  while (true);301  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel302  // CHECK-NEXT: private clause303  // CHECK-NEXT: ArraySectionExpr304  // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'305  // CHECK-NEXT: CallExpr{{.*}} 'int'306  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>307  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'308  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'309  // CHECK-NEXT: WhileStmt310  // CHECK-NEXT: CXXBoolLiteralExpr311  // CHECK-NEXT: NullStmt312 313#pragma acc parallel private(ptr[i:i])314  while (true);315  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel316  // CHECK-NEXT: private clause317  // CHECK-NEXT: ArraySectionExpr318  // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'319  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>320  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'321  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>322  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'323  // CHECK-NEXT: WhileStmt324  // CHECK-NEXT: CXXBoolLiteralExpr325  // CHECK-NEXT: NullStmt326 327#pragma acc parallel private(CEArray[returns_3() - 2: I])328  while (true);329  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel330  // CHECK-NEXT: private clause331  // CHECK-NEXT: ArraySectionExpr332  // CHECK-NEXT: DeclRefExpr{{.*}} 'auto' lvalue NonTypeTemplateParm{{.*}} 'CEArray' 'auto &'333  // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'334  // CHECK-NEXT: CallExpr{{.*}} 'int'335  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>336  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'337  // CHECK-NEXT: IntegerLiteral{{.*}} 2338  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'339  // CHECK-NEXT: WhileStmt340  // CHECK-NEXT: CXXBoolLiteralExpr341  // CHECK-NEXT: NullStmt342 343#pragma acc parallel private(CEArray[: I])344  while (true);345  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel346  // CHECK-NEXT: private clause347  // CHECK-NEXT: ArraySectionExpr348  // CHECK-NEXT: DeclRefExpr{{.*}} 'auto' lvalue NonTypeTemplateParm{{.*}} 'CEArray' 'auto &'349  // CHECK-NEXT: <<<NULL>>>350  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'351  // CHECK-NEXT: WhileStmt352  // CHECK-NEXT: CXXBoolLiteralExpr353  // CHECK-NEXT: NullStmt354 355 356  // Instantiation:357  // CHECK-NEXT: FunctionDecl{{.*}} Templ 'void (int)' implicit_instantiation358  // CHECK-NEXT: TemplateArgument{{.*}} 'int'359  // CHECK-NEXT: BuiltinType{{.*}} 'int'360  // CHECK-NEXT: TemplateArgument integral '3U'361  // CHECK-NEXT: TemplateArgument decl362  // CHECK-NEXT: Var{{.*}} 'CEArray' 'const int[5]'363  // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'364  // CHECK-NEXT: CompoundStmt365 366  // T array[I+2];367  // CHECK-NEXT: DeclStmt368  // CHECK-NEXT: VarDecl{{.*}} array 'int[5]'369  // T VLA[i];370  // CHECK-NEXT: DeclStmt371  // CHECK-NEXT: VarDecl{{.*}} VLA 'int[i]'372  // T *ptr;373  // CHECK-NEXT: DeclStmt374  // CHECK-NEXT: VarDecl{{.*}} ptr 'int *'375 376//#pragma acc parallel private(array[returns_3():])377  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel378  // CHECK-NEXT: private clause379  // CHECK-NEXT: ArraySectionExpr380  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>381  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'382  // CHECK-NEXT: CallExpr{{.*}} 'int'383  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>384  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}}'returns_3' 'int ()'385  // CHECK-NEXT: <<<NULL>>>386  // CHECK-NEXT: WhileStmt387  // CHECK-NEXT: CXXBoolLiteralExpr388  // CHECK-NEXT: NullStmt389 390//#pragma acc parallel private(array[:I])391  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel392  // CHECK-NEXT: private clause393  // CHECK-NEXT: ArraySectionExpr394  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>395  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'396  // CHECK-NEXT: <<<NULL>>>397  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'398  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I399  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3400  // CHECK-NEXT: WhileStmt401  // CHECK-NEXT: CXXBoolLiteralExpr402  // CHECK-NEXT: NullStmt403 404//#pragma acc parallel private(array[returns_3()-2:I])405  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel406  // CHECK-NEXT: private clause407  // CHECK-NEXT: ArraySectionExpr408  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>409  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'410  // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'411  // CHECK-NEXT: CallExpr{{.*}} 'int'412  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>413  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'414  // CHECK-NEXT: IntegerLiteral{{.*}} 2415  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'416  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I417  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3418  // CHECK-NEXT: WhileStmt419  // CHECK-NEXT: CXXBoolLiteralExpr420  // CHECK-NEXT: NullStmt421 422//#pragma acc parallel private(array[i:i])423  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel424  // CHECK-NEXT: private clause425  // CHECK-NEXT: ArraySectionExpr426  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>427  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'428  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>429  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'430  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>431  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'432  // CHECK-NEXT: WhileStmt433  // CHECK-NEXT: CXXBoolLiteralExpr434  // CHECK-NEXT: NullStmt435 436//#pragma acc parallel private(VLA[:I])437  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel438  // CHECK-NEXT: private clause439  // CHECK-NEXT: ArraySectionExpr440  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>441  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'442  // CHECK-NEXT: <<<NULL>>>443  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'444  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I445  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3446  // CHECK-NEXT: WhileStmt447  // CHECK-NEXT: CXXBoolLiteralExpr448  // CHECK-NEXT: NullStmt449 450//#pragma acc parallel private(VLA[returns_3():I])451  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel452  // CHECK-NEXT: private clause453  // CHECK-NEXT: ArraySectionExpr454  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>455  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'456  // CHECK-NEXT: CallExpr{{.*}}'int'457  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>458  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'459  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'460  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I461  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3462  // CHECK-NEXT: WhileStmt463  // CHECK-NEXT: CXXBoolLiteralExpr464  // CHECK-NEXT: NullStmt465 466//#pragma acc parallel private(VLA[i:i])467  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel468  // CHECK-NEXT: private clause469  // CHECK-NEXT: ArraySectionExpr470  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>471  // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'472  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>473  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'474  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>475  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'476  // CHECK-NEXT: WhileStmt477  // CHECK-NEXT: CXXBoolLiteralExpr478  // CHECK-NEXT: NullStmt479 480//#pragma acc parallel private(ptr[:I])481  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel482  // CHECK-NEXT: private clause483  // CHECK-NEXT: ArraySectionExpr484  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>485  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'486  // CHECK-NEXT: <<<NULL>>>487  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'488  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I489  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3490  // CHECK-NEXT: WhileStmt491  // CHECK-NEXT: CXXBoolLiteralExpr492  // CHECK-NEXT: NullStmt493 494//#pragma acc parallel private(ptr[returns_3():I])495  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel496  // CHECK-NEXT: private clause497  // CHECK-NEXT: ArraySectionExpr498  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>499  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'500  // CHECK-NEXT: CallExpr{{.*}} 'int'501  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>502  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'503  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'504  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I505  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3506  // CHECK-NEXT: WhileStmt507  // CHECK-NEXT: CXXBoolLiteralExpr508  // CHECK-NEXT: NullStmt509 510//#pragma acc parallel private(ptr[i:i])511  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel512  // CHECK-NEXT: private clause513  // CHECK-NEXT: ArraySectionExpr514  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>515  // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'516  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>517  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'518  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>519  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'520  // CHECK-NEXT: WhileStmt521  // CHECK-NEXT: CXXBoolLiteralExpr522  // CHECK-NEXT: NullStmt523 524//#pragma acc parallel private(CEArray[returns_3() - 2: I])525  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel526  // CHECK-NEXT: private clause527  // CHECK-NEXT: ArraySectionExpr528  // CHECK-NEXT: ImplicitCastExpr{{.*}}'const int *' <ArrayToPointerDecay>529  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'const int[5]' lvalue530  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray531  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int[5]' lvalue Var{{.*}}'CEArray' 'const int[5]'532  // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'533  // CHECK-NEXT: CallExpr{{.*}} 'int'534  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>535  // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'536  // CHECK-NEXT: IntegerLiteral{{.*}} 2537  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'538  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I539  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3540  // CHECK-NEXT: WhileStmt541  // CHECK-NEXT: CXXBoolLiteralExpr542  // CHECK-NEXT: NullStmt543 544//#pragma acc parallel private(CEArray[: I])545  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel546  // CHECK-NEXT: private clause547  // CHECK-NEXT: ArraySectionExpr548  // CHECK-NEXT: ImplicitCastExpr{{.*}}'const int *' <ArrayToPointerDecay>549  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'const int[5]' lvalue550  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray551  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int[5]' lvalue Var{{.*}}'CEArray' 'const int[5]'552  // CHECK-NEXT: <<<NULL>>>553  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'554  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I555  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3556  // CHECK-NEXT: WhileStmt557  // CHECK-NEXT: CXXBoolLiteralExpr558  // CHECK-NEXT: NullStmt559}560 561// CHECK-NEXT: FunctionDecl{{.*}}inst562void inst() {563  static constexpr int CEArray[5]={1,2,3,4,5};564  Templ<int, 3, CEArray>(5);565}566#endif567