373 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#ifndef PCH_HELPER7#define PCH_HELPER8 9template<unsigned I, typename ConvertsToInt, typename Int>10void TemplUses(ConvertsToInt CTI, Int IsI) {11 // CHECK: FunctionTemplateDecl{{.*}}TemplUses12 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 0 I13 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 ConvertsToInt14 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 Int15 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void (ConvertsToInt, Int)'16 // CHECK-NEXT: ParmVarDecl{{.*}}CTI 'ConvertsToInt'17 // CHECK-NEXT: ParmVarDecl{{.*}}IsI 'Int'18 // CHECK-NEXT: CompoundStmt19 20 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>21 // CHECK-NEXT: worker clause{{.*}}22 // CHECK-NEXT: ForStmt23 // CHECK-NEXT: DeclStmt24 // CHECK-NEXT: VarDecl{{.*}} i 'int'25 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 026 // CHECK-NEXT: <<<NULL>>>27 // CHECK-NEXT: BinaryOperator{{.*}}'<'28 // CHECK-NEXT: ImplicitCastExpr29 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'30 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 531 // CHECK-NEXT: UnaryOperator{{.*}}++32 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'33 // CHECK-NEXT: NullStmt34#pragma acc loop worker35 for(int i = 0; i < 5; ++i);36 37 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel38 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel39 // CHECK-NEXT: worker clause{{.*}}40 // CHECK-NEXT: ForStmt41 // CHECK-NEXT: DeclStmt42 // CHECK-NEXT: VarDecl{{.*}} i 'int'43 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 044 // CHECK-NEXT: <<<NULL>>>45 // CHECK-NEXT: BinaryOperator{{.*}}'<'46 // CHECK-NEXT: ImplicitCastExpr47 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'48 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 549 // CHECK-NEXT: UnaryOperator{{.*}}++50 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'51 // CHECK-NEXT: NullStmt52#pragma acc parallel53#pragma acc loop worker54 for(int i = 0; i < 5; ++i);55 56 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial57 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial58 // CHECK-NEXT: worker clause{{.*}}59 // CHECK-NEXT: ForStmt60 // CHECK-NEXT: DeclStmt61 // CHECK-NEXT: VarDecl{{.*}} i 'int'62 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 063 // CHECK-NEXT: <<<NULL>>>64 // CHECK-NEXT: BinaryOperator{{.*}}'<'65 // CHECK-NEXT: ImplicitCastExpr66 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'67 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 568 // CHECK-NEXT: UnaryOperator{{.*}}++69 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'70 // CHECK-NEXT: NullStmt71#pragma acc serial72#pragma acc loop worker73 for(int i = 0; i < 5; ++i);74 75 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels76 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels77 // CHECK-NEXT: worker clause{{.*}}78 // CHECK-NEXT: DeclRefExpr{{.*}} 'ConvertsToInt' lvalue ParmVar79 // CHECK-NEXT: ForStmt80 // CHECK-NEXT: DeclStmt81 // CHECK-NEXT: VarDecl{{.*}} i 'int'82 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 083 // CHECK-NEXT: <<<NULL>>>84 // CHECK-NEXT: BinaryOperator{{.*}}'<'85 // CHECK-NEXT: ImplicitCastExpr86 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'87 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 588 // CHECK-NEXT: UnaryOperator{{.*}}++89 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'90 // CHECK-NEXT: NullStmt91#pragma acc kernels92#pragma acc loop worker(CTI)93 for(int i = 0; i < 5; ++i);94 95 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels96 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels97 // CHECK-NEXT: worker clause{{.*}}98 // CHECK-NEXT: DeclRefExpr{{.*}} 'Int' lvalue ParmVar99 // CHECK-NEXT: ForStmt100 // CHECK-NEXT: DeclStmt101 // CHECK-NEXT: VarDecl{{.*}} i 'int'102 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0103 // CHECK-NEXT: <<<NULL>>>104 // CHECK-NEXT: BinaryOperator{{.*}}'<'105 // CHECK-NEXT: ImplicitCastExpr106 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'107 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5108 // CHECK-NEXT: UnaryOperator{{.*}}++109 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'110 // CHECK-NEXT: NullStmt111#pragma acc kernels112#pragma acc loop worker(num:IsI)113 for(int i = 0; i < 5; ++i);114 115 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels116 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels117 // CHECK-NEXT: worker clause{{.*}}118 // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int'119 // CHECK-NEXT: ForStmt120 // CHECK-NEXT: DeclStmt121 // CHECK-NEXT: VarDecl{{.*}} i 'int'122 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0123 // CHECK-NEXT: <<<NULL>>>124 // CHECK-NEXT: BinaryOperator{{.*}}'<'125 // CHECK-NEXT: ImplicitCastExpr126 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'127 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5128 // CHECK-NEXT: UnaryOperator{{.*}}++129 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'130 // CHECK-NEXT: NullStmt131#pragma acc kernels132#pragma acc loop worker(num:I)133 for(int i = 0; i < 5; ++i);134 135 // Instantiations:136 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (Converts, int)' implicit_instantiation137 // CHECK-NEXT: TemplateArgument integral '3U'138 // CHECK-NEXT: TemplateArgument type 'Converts'139 // CHECK-NEXT: RecordType{{.*}}'Converts'140 // CHECK-NEXT: CXXRecord{{.*}}'Converts141 // CHECK-NEXT: TemplateArgument type 'int'142 // CHECK-NEXT: BuiltinType{{.*}}'int'143 // CHECK-NEXT: ParmVarDecl{{.*}} CTI 'Converts'144 // CHECK-NEXT: ParmVarDecl{{.*}} IsI 'int'145 // CHECK-NEXT: CompoundStmt146 //147 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>148 // CHECK-NEXT: worker clause{{.*}}149 // CHECK-NEXT: ForStmt150 // CHECK-NEXT: DeclStmt151 // CHECK-NEXT: VarDecl{{.*}} i 'int'152 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0153 // CHECK-NEXT: <<<NULL>>>154 // CHECK-NEXT: BinaryOperator{{.*}}'<'155 // CHECK-NEXT: ImplicitCastExpr156 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'157 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5158 // CHECK-NEXT: UnaryOperator{{.*}}++159 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'160 // CHECK-NEXT: NullStmt161 //162 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel163 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel164 // CHECK-NEXT: worker clause{{.*}}165 // CHECK-NEXT: ForStmt166 // CHECK-NEXT: DeclStmt167 // CHECK-NEXT: VarDecl{{.*}} i 'int'168 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0169 // CHECK-NEXT: <<<NULL>>>170 // CHECK-NEXT: BinaryOperator{{.*}}'<'171 // CHECK-NEXT: ImplicitCastExpr172 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'173 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5174 // CHECK-NEXT: UnaryOperator{{.*}}++175 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'176 // CHECK-NEXT: NullStmt177 //178 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial179 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial180 // CHECK-NEXT: worker clause{{.*}}181 // CHECK-NEXT: ForStmt182 // CHECK-NEXT: DeclStmt183 // CHECK-NEXT: VarDecl{{.*}} i 'int'184 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0185 // CHECK-NEXT: <<<NULL>>>186 // CHECK-NEXT: BinaryOperator{{.*}}'<'187 // CHECK-NEXT: ImplicitCastExpr188 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'189 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5190 // CHECK-NEXT: UnaryOperator{{.*}}++191 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'192 // CHECK-NEXT: NullStmt193 //194 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels195 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels196 // CHECK-NEXT: worker clause{{.*}}197 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>198 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'199 // CHECK-NEXT: MemberExpr{{.*}} .operator int200 // CHECK-NEXT: DeclRefExpr{{.*}} 'Converts' lvalue ParmVar201 // CHECK-NEXT: ForStmt202 // CHECK-NEXT: DeclStmt203 // CHECK-NEXT: VarDecl{{.*}} i 'int'204 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0205 // CHECK-NEXT: <<<NULL>>>206 // CHECK-NEXT: BinaryOperator{{.*}}'<'207 // CHECK-NEXT: ImplicitCastExpr208 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'209 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5210 // CHECK-NEXT: UnaryOperator{{.*}}++211 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'212 // CHECK-NEXT: NullStmt213 //214 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels215 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels216 // CHECK-NEXT: worker clause{{.*}}217 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>218 // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'IsI' 'int'219 // CHECK-NEXT: ForStmt220 // CHECK-NEXT: DeclStmt221 // CHECK-NEXT: VarDecl{{.*}} i 'int'222 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0223 // CHECK-NEXT: <<<NULL>>>224 // CHECK-NEXT: BinaryOperator{{.*}}'<'225 // CHECK-NEXT: ImplicitCastExpr226 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'227 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5228 // CHECK-NEXT: UnaryOperator{{.*}}++229 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'230 // CHECK-NEXT: NullStmt231 //232 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels233 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels234 // CHECK-NEXT: worker clause{{.*}}235 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'unsigned int'236 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}}'unsigned int' depth 0 index 0 I237 // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3238 // CHECK-NEXT: ForStmt239 // CHECK-NEXT: DeclStmt240 // CHECK-NEXT: VarDecl{{.*}} i 'int'241 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0242 // CHECK-NEXT: <<<NULL>>>243 // CHECK-NEXT: BinaryOperator{{.*}}'<'244 // CHECK-NEXT: ImplicitCastExpr245 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'246 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5247 // CHECK-NEXT: UnaryOperator{{.*}}++248 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'249 // CHECK-NEXT: NullStmt250}251 252struct Converts{253 operator int();254};255 256void uses() {257 // CHECK: FunctionDecl{{.*}} uses258 // CHECK-NEXT: CompoundStmt259 //260 // CHECK-NEXT: CallExpr261 TemplUses<3>(Converts{}, 5);262 263 // CHECK: OpenACCLoopConstruct{{.*}}<orphan>264 // CHECK-NEXT: worker clause{{.*}}265 // CHECK-NEXT: ForStmt266 // CHECK-NEXT: DeclStmt267 // CHECK-NEXT: VarDecl{{.*}} i 'int'268 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0269 // CHECK-NEXT: <<<NULL>>>270 // CHECK-NEXT: BinaryOperator{{.*}}'<'271 // CHECK-NEXT: ImplicitCastExpr272 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'273 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5274 // CHECK-NEXT: UnaryOperator{{.*}}++275 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'276 // CHECK-NEXT: NullStmt277#pragma acc loop worker278 for(int i = 0; i < 5; ++i);279 280 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel281 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel282 // CHECK-NEXT: worker clause{{.*}}283 // CHECK-NEXT: ForStmt284 // CHECK-NEXT: DeclStmt285 // CHECK-NEXT: VarDecl{{.*}} i 'int'286 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0287 // CHECK-NEXT: <<<NULL>>>288 // CHECK-NEXT: BinaryOperator{{.*}}'<'289 // CHECK-NEXT: ImplicitCastExpr290 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'291 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5292 // CHECK-NEXT: UnaryOperator{{.*}}++293 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'294 // CHECK-NEXT: NullStmt295#pragma acc parallel296#pragma acc loop worker297 for(int i = 0; i < 5; ++i);298 299 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial300 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial301 // CHECK-NEXT: worker clause{{.*}}302 // CHECK-NEXT: ForStmt303 // CHECK-NEXT: DeclStmt304 // CHECK-NEXT: VarDecl{{.*}} i 'int'305 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0306 // CHECK-NEXT: <<<NULL>>>307 // CHECK-NEXT: BinaryOperator{{.*}}'<'308 // CHECK-NEXT: ImplicitCastExpr309 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'310 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5311 // CHECK-NEXT: UnaryOperator{{.*}}++312 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'313 // CHECK-NEXT: NullStmt314#pragma acc serial315#pragma acc loop worker316 for(int i = 0; i < 5; ++i);317 318 Converts CTI;319 // CHECK-NEXT: DeclStmt320 // CHECK-NEXT: VarDecl321 // CHECK-NEXT: CXXConstructExpr322 323 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels324 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels325 // CHECK-NEXT: worker clause{{.*}}326 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>327 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'328 // CHECK-NEXT: MemberExpr{{.*}} .operator int329 // CHECK-NEXT: DeclRefExpr{{.*}}'Converts' lvalue Var330 // CHECK-NEXT: ForStmt331 // CHECK-NEXT: DeclStmt332 // CHECK-NEXT: VarDecl{{.*}} i 'int'333 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0334 // CHECK-NEXT: <<<NULL>>>335 // CHECK-NEXT: BinaryOperator{{.*}}'<'336 // CHECK-NEXT: ImplicitCastExpr337 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'338 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5339 // CHECK-NEXT: UnaryOperator{{.*}}++340 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'341 // CHECK-NEXT: NullStmt342#pragma acc kernels343#pragma acc loop worker(CTI)344 for(int i = 0; i < 5; ++i);345 346 int IsI;347 // CHECK-NEXT: DeclStmt348 // CHECK-NEXT: VarDecl349 350 // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels351 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels352 // CHECK-NEXT: worker clause{{.*}}353 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <LValueToRValue>354 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var355 // CHECK-NEXT: ForStmt356 // CHECK-NEXT: DeclStmt357 // CHECK-NEXT: VarDecl{{.*}} i 'int'358 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0359 // CHECK-NEXT: <<<NULL>>>360 // CHECK-NEXT: BinaryOperator{{.*}}'<'361 // CHECK-NEXT: ImplicitCastExpr362 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'363 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5364 // CHECK-NEXT: UnaryOperator{{.*}}++365 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'366 // CHECK-NEXT: NullStmt367#pragma acc kernels368#pragma acc loop worker(num:IsI)369 for(int i = 0; i < 5; ++i);370}371 372#endif // PCH_HELPER373