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