brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · e504ea7 Raw
123 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 10template<typename T>11void TemplFunc() {12  // CHECK: FunctionTemplateDecl{{.*}}TemplFunc13  // CHECK-NEXT: TemplateTypeParmDecl14 15  // Match the prototype:16  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc17  // CHECK-NEXT: CompoundStmt18 19#pragma acc serial loop self20  for (unsigned i = 0; i < 5; ++i);21  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop22  // CHECK-NEXT: self clause23  // CHECK-NEXT: <<<NULL>>24  // CHECK-NEXT: ForStmt25  // CHECK: NullStmt26 27#pragma acc kernels loop self(T::SomeFloat)28  for (unsigned i = 0; i < 5; ++i);29  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop30  // CHECK-NEXT: self clause31  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue32  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'33  // CHECK-NEXT: ForStmt34  // CHECK: NullStmt35 36#pragma acc parallel loop self(T::SomeFloat) if (T::SomeFloat)37  for (unsigned i = 0; i < 5; ++i);38  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop39  // CHECK-NEXT: self clause40  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue41  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'42  // CHECK-NEXT: if clause43  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue44  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'45  // CHECK-NEXT: ForStmt46  // CHECK: NullStmt47 48#pragma acc serial loop if(T::SomeFloat) self(T::SomeFloat)49  for (unsigned i = 0; i < 5; ++i);50  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop51  // CHECK-NEXT: if clause52  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue53  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'54  // CHECK-NEXT: self clause55  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue56  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'57  // CHECK-NEXT: ForStmt58  // CHECK: NullStmt59  //60  // Match the instantiation:61  // CHECK: FunctionDecl{{.*}}TemplFunc{{.*}}implicit_instantiation62  // CHECK-NEXT: TemplateArgument type 'InstTy'63  // CHECK-NEXT: RecordType{{.*}} 'InstTy'64  // CHECK-NEXT: CXXRecord{{.*}} 'InstTy'65  // CHECK-NEXT: CompoundStmt66  //67  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop68  // CHECK-NEXT: self clause69  // CHECK-NEXT: <<<NULL>>70  // CHECK-NEXT: ForStmt71  // CHECK: NullStmt72 73  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop74  // CHECK-NEXT: self clause75  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>76  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>77  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'78  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'79  // CHECK-NEXT: ForStmt80  // CHECK: NullStmt81 82  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop83  // CHECK-NEXT: self clause84  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>85  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>86  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'87  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'88  // CHECK-NEXT: if clause89  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>90  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>91  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'92  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'93  // CHECK-NEXT: ForStmt94  // CHECK: NullStmt95 96  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop97  // CHECK-NEXT: if clause98  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>99  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>100  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'101  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'102  // CHECK-NEXT: self clause103  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>104  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>105  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'106  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'107  // CHECK-NEXT: ForStmt108  // CHECK: NullStmt109 110}111 112struct BoolConversion{ operator bool() const;};113struct InstTy {114  using IntTy = int;115  static constexpr float SomeFloat = 5.0;116  static constexpr BoolConversion BC;117};118 119void Instantiate() {120  TemplFunc<InstTy>();121}122#endif123