brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.0 KiB · dfdcc32 Raw
545 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 10auto Lambda = [](){};11#pragma acc routine(Lambda) worker nohost bind("string")12// CHECK: OpenACCRoutineDecl{{.*}} routine13// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' '(lambda at14// CHECK-NEXT: worker clause15// CHECK-NEXT: nohost clause16// CHECK-NEXT: bind clause17// CHECK-NEXT: StringLiteral{{.*}} "string"18 19int function();20#pragma acc routine (function) nohost vector bind(identifier)21// CHECK: OpenACCRoutineDecl{{.*}} routine22// CHECK-NEXT: DeclRefExpr{{.*}} 'function' 'int ()'23// CHECK-NEXT: nohost clause24// CHECK-NEXT: vector clause25// CHECK-NEXT: bind clause identifier 'identifier'26 27#pragma acc routine(function) device_type(acc_device_nvidia) seq28// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine29// CHECK-NEXT: DeclRefExpr{{.*}} 'function' 'int ()'30// CHECK-NEXT: device_type(acc_device_nvidia)31// CHECK-NEXT: seq clause32#pragma acc routine(function) nohost dtype(nvidia) vector33// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine34// CHECK-NEXT: DeclRefExpr{{.*}} 'function' 'int ()'35// CHECK-NEXT: nohost clause36// CHECK-NEXT: dtype(nvidia)37// CHECK-NEXT: vector clause38 39#pragma acc routine nohost vector40int function2();41// CHECK: FunctionDecl{{.*}} function242// CHECK-NEXT: OpenACCRoutineDeclAttr43// CHECK-NEXT: nohost clause44// CHECK-NEXT: vector clause45 46#pragma acc routine worker nohost bind("asdf")47auto Lambda2 = [](){};48// CHECK: VarDecl{{.*}} Lambda2 '(lambda at49// CHECK: CXXMethodDecl{{.*}} operator()50// CHECK-NEXT: CompoundStmt51// CHECK-NEXT: OpenACCRoutineDeclAttr52// CHECK-NEXT: worker clause53// CHECK-NEXT: nohost clause54// CHECK-NEXT: bind clause55// CHECK-NEXT: StringLiteral{{.*}}"asdf"56 57#pragma acc routine worker nohost bind("asdf")58auto Lambda3 = [](auto a){ return a;};59// CHECK: VarDecl{{.*}} Lambda3 '(lambda at60// CHECK-NEXT: LambdaExpr61// CHECK-NEXT: CXXRecordDecl62// CHECK: FunctionTemplateDecl{{.*}} operator()63// CHECK-NEXT: TemplateTypeParmDecl64// CHECK-NEXT: CXXMethodDecl{{.*}} operator() 'auto (auto) const'65// CHECK-NEXT: ParmVarDecl{{.*}}'auto'66// CHECK-NEXT: CompoundStmt67// CHECK-NEXT: ReturnStmt68// CHECK-NEXT: DeclRefExpr69// CHECK: OpenACCRoutineDeclAttr70// CHECK-NEXT: worker clause71// CHECK-NEXT: nohost clause72// CHECK-NEXT: bind clause73// CHECK-NEXT: StringLiteral{{.*}}"asdf"74// CHECK-NEXT: CXXMethodDecl{{.*}}operator() 'int (int) const'{{.*}} implicit_instantiation75// CHECK-NEXT: TemplateArgument type 'int'76// CHECK-NEXT: BuiltinType77// CHECK-NEXT: ParmVarDecl{{.*}}'int'78// CHECK-NEXT: CompoundStmt79// CHECK-NEXT: ReturnStmt80// CHECK-NEXT: ImplicitCastExpr81// CHECK-NEXT: DeclRefExpr82// CHECK-NEXT: OpenACCRoutineDeclAttr83// CHECK-NEXT: worker clause84// CHECK-NEXT: nohost clause85// CHECK-NEXT: bind clause86// CHECK-NEXT: StringLiteral{{.*}}"asdf"87 88int InstL3 = Lambda3(1);89 90namespace NS {91  int NSFunc();92auto Lambda = [](){};93}94#pragma acc routine(NS::NSFunc) seq95// CHECK: OpenACCRoutineDecl{{.*}} routine96// CHECK-NEXT: DeclRefExpr{{.*}} 'NSFunc' 'int ()'97// CHECK-NEXT: NestedNameSpecifier{{.*}} 'NS'98// CHECK-NEXT: seq clause99#pragma acc routine(NS::Lambda) gang100// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine101// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'NS::(lambda at102// CHECK-NEXT: NestedNameSpecifier{{.*}} 'NS'103// CHECK-NEXT: gang clause104 105constexpr int getInt() { return 1; }106 107struct S {108  void MemFunc();109#pragma acc routine gang(dim: 1)110  void MemFunc2();111  // CHECK: CXXMethodDecl{{.*}}MemFunc2112  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}} 113  // CHECK-NEXT: gang clause114  // CHECK-NEXT: ConstantExpr{{.*}}'int'115  // CHECK-NEXT: value: Int 1116  static void StaticMemFunc();117#pragma acc routine gang(dim: getInt())118  static void StaticMemFunc2();119  // CHECK: CXXMethodDecl{{.*}}StaticMemFunc2120  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}121  // CHECK-NEXT: gang clause122  // CHECK-NEXT: ConstantExpr{{.*}}'int'123  // CHECK-NEXT: value: Int 1124  constexpr static auto Lambda = [](){ return 1; };125#pragma acc routine worker126  constexpr static auto Lambda2 = [](){ return 1; };127  // CHECK: VarDecl{{.*}}Lambda2 'const S::(lambda at128  // CHECK-NEXT: value: Struct129  // CHECK-NEXT: ImplicitCastExpr130  // CHECK-NEXT: LambdaExpr131  // CHECK-NEXT: CXXRecordDecl132  // CHECK: CXXMethodDecl{{.*}} operator() 'int () const'133  // CHECK-NEXT: CompoundStmt134  // CHECK-NEXT: ReturnStmt135  // CHECK-NEXT: IntegerLiteral136  // CHECK: OpenACCRoutineDeclAttr{{.*}}137  // CHECK-NEXT: worker clause138 139#pragma acc routine(S::MemFunc) gang(dim: 1)140// CHECK: OpenACCRoutineDecl{{.*}} routine141// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'void ()'142// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'143// CHECK-NEXT: gang clause144// CHECK-NEXT: ConstantExpr{{.*}}'int'145// CHECK-NEXT: value: Int 1146#pragma acc routine(S::StaticMemFunc) gang(dim:getInt())147// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine148// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'void ()'149// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'150// CHECK-NEXT: gang clause151// CHECK-NEXT: ConstantExpr{{.*}}'int'152// CHECK-NEXT: value: Int 1153#pragma acc routine(S::Lambda) worker154// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine155// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at156// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'157// CHECK-NEXT: worker clause158 159#pragma acc routine(MemFunc) gang(dim: 1)160// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine161// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'void ()'162// CHECK-NEXT: gang clause163// CHECK-NEXT: ConstantExpr{{.*}}'int'164// CHECK-NEXT: value: Int 1165#pragma acc routine(StaticMemFunc) gang(dim:Lambda())166// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine167// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'void ()'168// CHECK-NEXT: gang clause169// CHECK-NEXT: ConstantExpr{{.*}}'int'170// CHECK-NEXT: value: Int 1171#pragma acc routine(Lambda) worker172// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine173// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at174// CHECK-NEXT: worker clause175#pragma acc routine(Lambda) worker device_type(host)176// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine177// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at178// CHECK-NEXT: worker clause179// CHECK-NEXT: device_type(host)180#pragma acc routine(Lambda) dtype(radeon) vector181// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine182// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at183// CHECK-NEXT: dtype(radeon)184// CHECK-NEXT: vector clause185};186 187#pragma acc routine(S::MemFunc) gang(dim: 1)188// CHECK: OpenACCRoutineDecl{{.*}} routine189// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'void ()'190// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'191// CHECK-NEXT: gang clause192// CHECK-NEXT: ConstantExpr{{.*}}'int'193// CHECK-NEXT: value: Int 1194#pragma acc routine(S::StaticMemFunc) worker195// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine196// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'void ()'197// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'198// CHECK-NEXT: worker clause199#pragma acc routine(S::Lambda) vector200// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine201// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at202// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'203// CHECK-NEXT: vector204 205template<typename T>206struct DepS {207  T MemFunc();208  static T StaticMemFunc();209#pragma acc routine gang(dim: T{1})210  static T StaticMemFunc2();211  // CHECK: CXXMethodDecl{{.*}}StaticMemFunc2212  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}213  // CHECK-NEXT: gang clause214  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'T' list215  constexpr static auto Lambda = [](){return 1;};216#pragma acc routine gang(dim: T{1})217  constexpr static auto Lambda2 = [](){return 1;};218  // CHECK: VarDecl{{.*}}Lambda2 'const auto'219  // CHECK-NEXT: LambdaExpr220  // CHECK-NEXT: CXXRecordDecl221  // CHECK: CXXMethodDecl{{.*}} operator()222  // CHECK-NEXT: CompoundStmt223  // CHECK-NEXT: ReturnStmt224  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1225  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}226  // CHECK-NEXT: gang clause227  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'T' list228#pragma acc routine gang(dim: T{1})229  constexpr static auto Lambda3 = [](auto){return 1;};230  // CHECK: VarDecl{{.*}}Lambda3 'const auto'231  // CHECK-NEXT: LambdaExpr232  // CHECK-NEXT: CXXRecordDecl233  // CHECK: FunctionTemplateDecl{{.*}} operator()234  // CHECK-NEXT: TemplateTypeParmDecl235  // CHECK-NEXT: CXXMethodDecl{{.*}} operator() 'auto (auto) const'236  // CHECK-NEXT: ParmVarDecl{{.*}}'auto'237  // CHECK-NEXT: CompoundStmt238  // CHECK-NEXT: ReturnStmt239  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1240  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}241  // CHECK-NEXT: gang clause242  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'T' list243#pragma acc routine gang(dim: Lambda())244  T MemFunc2();245  // CHECK: CXXMethodDecl{{.*}}MemFunc2246  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}247  // CHECK-NEXT: gang clause248  // CHECK-NEXT: CallExpr{{.*}}'<dependent type>'249 250#pragma acc routine(Lambda) gang(dim: Lambda())251// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 252// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const auto'253// CHECK-NEXT: gang clause254// CHECK-NEXT: CallExpr{{.*}}'<dependent type>'255#pragma acc routine(MemFunc) worker256// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 257// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'T ()'258// CHECK-NEXT: worker clause259#pragma acc routine(StaticMemFunc) seq260// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 261// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'T ()'262// CHECK-NEXT: seq clause263 264#pragma acc routine(DepS::Lambda) gang(dim:1)265// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 266// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const auto'267// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'268// CHECK-NEXT: gang clause269// CHECK-NEXT: ConstantExpr{{.*}}'int'270// CHECK-NEXT: value: Int 1271#pragma acc routine(DepS::MemFunc) gang272// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 273// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'T ()'274// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'275// CHECK-NEXT: gang clause276#pragma acc routine(DepS::StaticMemFunc) worker277// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 278// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'T ()'279// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'280// CHECK-NEXT: worker clause281 282#pragma acc routine(DepS<T>::Lambda) vector283// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 284// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const auto'285// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'286// CHECK-NEXT: vector clause287#pragma acc routine(DepS<T>::MemFunc) seq288// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 289// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'T ()'290// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'291// CHECK-NEXT: seq clause292#pragma acc routine(DepS<T>::StaticMemFunc) worker293// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 294// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'T ()'295// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'296// CHECK-NEXT: worker clause297#pragma acc routine(DepS<T>::StaticMemFunc) worker device_type(multicore)298// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 299// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'T ()'300// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<T>'301// CHECK-NEXT: worker clause302// CHECK-NEXT: device_type(multicore)303 304// Instantiation:305// CHECK: ClassTemplateSpecializationDecl{{.*}}struct DepS306// CHECK: CXXRecordDecl{{.*}} struct DepS307 308// CHECK: CXXMethodDecl{{.*}}StaticMemFunc2309// CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}310// CHECK-NEXT: gang clause311// CHECK-NEXT: ConstantExpr{{.*}}'int'312// CHECK-NEXT: value: Int 1313 314// CHECK: VarDecl{{.*}}Lambda2 'const DepS<int>::(lambda at315// CHECK-NEXT: value: Struct316// CHECK-NEXT: ImplicitCastExpr317// CHECK-NEXT: LambdaExpr318// CHECK-NEXT: CXXRecordDecl319// CHECK: CXXMethodDecl{{.*}} operator()320// CHECK-NEXT: CompoundStmt321// CHECK-NEXT: ReturnStmt322// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1323// CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}324// CHECK-NEXT: gang clause325// CHECK-NEXT: ConstantExpr{{.*}}'int'326// CHECK-NEXT: value: Int 1327 328// CHECK: VarDecl{{.*}}Lambda3 'const DepS<int>::(lambda at329// CHECK-NEXT: value: Struct330// CHECK-NEXT: ImplicitCastExpr331// CHECK-NEXT: LambdaExpr332// CHECK-NEXT: CXXRecordDecl333// CHECK: FunctionTemplateDecl{{.*}} operator()334// CHECK-NEXT: TemplateTypeParmDecl335// CHECK-NEXT: CXXMethodDecl{{.*}} operator() 'auto (auto) const'336// CHECK-NEXT: ParmVarDecl{{.*}}'auto'337// CHECK-NEXT: CompoundStmt338// CHECK-NEXT: ReturnStmt339// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1340// CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}341// CHECK-NEXT: gang clause342// CHECK-NEXT: ConstantExpr{{.*}}'int'343// CHECK-NEXT: value: Int 1344 345// CHECK: CXXMethodDecl{{.*}}MemFunc2346// CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}347// CHECK-NEXT: gang clause348// CHECK-NEXT: ConstantExpr{{.*}}'int'349// CHECK-NEXT: value: Int 1350 351// CHECK: OpenACCRoutineDecl{{.*}} routine 352// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const DepS<int>::353// CHECK-NEXT: gang clause354// CHECK-NEXT: ConstantExpr{{.*}}'int'355// CHECK-NEXT: value: Int 1356 357// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 358// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'int ()'359// CHECK-NEXT: worker clause360 361// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 362// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'int ()'363// CHECK-NEXT: seq clause364 365// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 366// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const DepS<int>::367// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'368// CHECK-NEXT: gang clause369// CHECK-NEXT: ConstantExpr{{.*}}'int'370// CHECK-NEXT: value: Int 1371 372// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 373// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'int ()'374// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'375// CHECK-NEXT: gang clause376 377// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 378// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'int ()'379// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'380// CHECK-NEXT: worker clause381 382// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 383// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const DepS<int>::384// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'385// CHECK-NEXT: vector clause 386 387// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 388// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'int ()'389// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'390// CHECK-NEXT: seq clause 391 392// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 393// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'int ()'394// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'395// CHECK-NEXT: worker clause396 397// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 398// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'int ()'399// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'400// CHECK-NEXT: worker clause401// CHECK-NEXT: device_type(multicore)402};403 404#pragma acc routine(DepS<int>::Lambda) gang(dim:1)405// CHECK: OpenACCRoutineDecl{{.*}} routine 406// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const DepS<int>::407// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'408// CHECK-NEXT: gang clause409// CHECK-NEXT: ConstantExpr{{.*}}'int'410// CHECK-NEXT: value: Int 1411#pragma acc routine(DepS<int>::MemFunc) worker412// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 413// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'int ()'414// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'415// CHECK-NEXT: worker clause416#pragma acc routine(DepS<int>::StaticMemFunc) vector417// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 418// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'int ()'419// CHECK-NEXT: NestedNameSpecifier{{.*}} 'DepS<int>'420// CHECK-NEXT: vector clause421 422template<typename T>423void TemplFunc() {424#pragma acc routine(T::MemFunc) gang(dim:T::Lambda())425// CHECK: DeclStmt426// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 427// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'428// CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'429// CHECK-NEXT: gang clause430// CHECK-NEXT: CallExpr{{.*}}'<dependent type>'431#pragma acc routine(T::StaticMemFunc) nohost worker bind("string")432// CHECK-NEXT: DeclStmt433// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 434// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'435// CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'436// CHECK-NEXT: nohost clause437// CHECK-NEXT: worker clause438// CHECK-NEXT: bind clause439// CHECK-NEXT: StringLiteral{{.*}} "string"440#pragma acc routine(T::Lambda) seq nohost bind(identifier)441// CHECK-NEXT: DeclStmt442// CHECK-NEXT: OpenACCRoutineDecl{{.*}} routine 443// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'444// CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'445// CHECK-NEXT: seq clause446// CHECK-NEXT: nohost clause447// CHECK-NEXT: bind clause identifier 'identifier'448 449 auto Lambda1 = [](){};450#pragma acc routine(Lambda1) seq451// CHECK: OpenACCRoutineDecl{{.*}} routine 452// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda1' 'auto'453// CHECK-NEXT: seq clause454 455#pragma acc routine seq456  auto Lambda2 = [](){};457  // CHECK: VarDecl{{.*}} Lambda2 'auto'458  // CHECK-NEXT: LambdaExpr459  // CHECK-NEXT: CXXRecordDecl460  // CHECK: CXXMethodDecl{{.*}} operator()461  // CHECK-NEXT: CompoundStmt462  // CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}463  // CHECK-NEXT: seq clause464 465#pragma acc routine seq466  auto Lambda3 = [](auto){};467  // CHECK: VarDecl{{.*}} Lambda3 'auto'468  // CHECK-NEXT: LambdaExpr469  // CHECK-NEXT: CXXRecordDecl470  // CHECK: FunctionTemplateDecl{{.*}} operator()471  // CHECK-NEXT: TemplateTypeParmDecl472  // CHECK-NEXT: CXXMethodDecl{{.*}} operator() 'auto (auto) const'473  // CHECK-NEXT: ParmVarDecl{{.*}}'auto'474  // CHECK-NEXT: CompoundStmt475  // CHECK-NEXT: OpenACCRoutineDeclAttr476  // CHECK-NEXT: seq clause477 478  Lambda3(T{});479 480// Instantiation:481// CHECK: FunctionDecl{{.*}} TemplFunc 'void ()' implicit_instantiation482// CHECK: DeclStmt483// CHECK-NEXT: OpenACCRoutineDecl{{.*}}484// CHECK-NEXT: DeclRefExpr{{.*}} 'MemFunc' 'void ()'485// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'486// CHECK-NEXT: gang clause487// CHECK-NEXT: ConstantExpr{{.*}}'int'488// CHECK-NEXT: value: Int 1489 490// CHECK-NEXT: DeclStmt491// CHECK-NEXT: OpenACCRoutineDecl{{.*}}492// CHECK-NEXT: DeclRefExpr{{.*}} 'StaticMemFunc' 'void ()'493// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'494// CHECK-NEXT: nohost clause495// CHECK-NEXT: worker clause496// CHECK-NEXT: bind clause497// CHECK-NEXT: StringLiteral{{.*}} "string"498 499// CHECK-NEXT: DeclStmt500// CHECK-NEXT: OpenACCRoutineDecl{{.*}}501// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda' 'const S::(lambda at502// CHECK-NEXT: NestedNameSpecifier{{.*}} 'S'503// CHECK-NEXT: seq clause504// CHECK-NEXT: nohost clause505// CHECK-NEXT: bind clause identifier 'identifier'506 507// CHECK: OpenACCRoutineDecl{{.*}} routine 508// CHECK-NEXT: DeclRefExpr{{.*}} 'Lambda1' '(lambda at509// CHECK-NEXT: seq clause510 511// CHECK: VarDecl{{.*}} Lambda2 '(lambda at512// CHECK-NEXT: LambdaExpr513// CHECK-NEXT: CXXRecordDecl514// CHECK: CXXMethodDecl{{.*}} operator()515// CHECK-NEXT: CompoundStmt516// CHECK-NEXT: OpenACCRoutineDeclAttr{{.*}}517// CHECK-NEXT: seq clause518 519// CHECK: VarDecl{{.*}} Lambda3 '(lambda at520// CHECK-NEXT: LambdaExpr521// CHECK-NEXT: CXXRecordDecl522// CHECK: FunctionTemplateDecl{{.*}} operator()523// CHECK-NEXT: TemplateTypeParmDecl524// CHECK-NEXT: CXXMethodDecl{{.*}} operator() 'auto (auto) const'525// CHECK-NEXT: ParmVarDecl{{.*}}'auto'526// CHECK-NEXT: CompoundStmt527// CHECK-NEXT: OpenACCRoutineDeclAttr528// CHECK-NEXT: seq clause529// CHECK: CXXMethodDecl{{.*}} operator() 'void (S) const'530// CHECK-NEXT: TemplateArgument531// CHECK-NEXT: RecordType532// CHECK-NEXT: CXXRecord533// CHECK-NEXT: ParmVarDecl534// CHECK-NEXT: CompoundStmt535// CHECK-NEXT: OpenACCRoutineDeclAttr536// CHECK-NEXT: seq clause537}538 539void usage() {540  DepS<int> s;541  TemplFunc<S>();542}543 544#endif545