Author: erichkeane Date: 2024-12-13T07:31:18-08:00 New Revision: b2b1eec2b249698337d90a77c000340f0248c9cd
URL: https://github.com/llvm/llvm-project/commit/b2b1eec2b249698337d90a77c000340f0248c9cd DIFF: https://github.com/llvm/llvm-project/commit/b2b1eec2b249698337d90a77c000340f0248c9cd.diff LOG: [OpenACC] enable 'copyin' clause sema for 'data'/'enter data' stop reporting 'copyin' as not implemented on a data/enter data construct, and enforce sema rules. Added: clang/test/SemaOpenACC/data-construct-copyin-ast.cpp clang/test/SemaOpenACC/data-construct-copyin-clause.c Modified: clang/lib/Sema/SemaOpenACC.cpp clang/test/AST/ast-print-openacc-data-construct.cpp clang/test/SemaOpenACC/data-construct-ast.cpp clang/test/SemaOpenACC/data-construct-async-clause.c clang/test/SemaOpenACC/data-construct-if-ast.cpp clang/test/SemaOpenACC/data-construct-if-clause.c clang/test/SemaOpenACC/data-construct-wait-ast.cpp clang/test/SemaOpenACC/data-construct-wait-clause.c clang/test/SemaOpenACC/data-construct.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index d1425aa4eeccea..91a5cd0d71b2f0 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -962,11 +962,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyInClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 3e828b594bc9c7..d5d034f5d0bc9f 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -14,8 +14,7 @@ void foo() { #pragma acc data device_type(int) ; -// CHECK: #pragma acc enter data -// CHECK-NOT: copyin(Var) +// CHECK: #pragma acc enter data copyin(Var) #pragma acc enter data copyin(Var) ; // CHECK: #pragma acc exit data @@ -34,7 +33,7 @@ void foo() { // CHECK: #pragma acc data default(none) if(i == array[1]) #pragma acc data default(none) if(i == array[1]) ; -// CHECK: #pragma acc enter data if(i == array[1]) +// CHECK: #pragma acc enter data copyin(Var) if(i == array[1]) #pragma acc enter data copyin(Var) if(i == array[1]) ; // CHECK: #pragma acc exit data if(i == array[1]) @@ -47,7 +46,7 @@ void foo() { // CHECK: #pragma acc data default(none) async(i) #pragma acc data default(none) async(i) ; -// CHECK: #pragma acc enter data async(i) +// CHECK: #pragma acc enter data copyin(i) async(i) #pragma acc enter data copyin(i) async(i) // CHECK: #pragma acc exit data async #pragma acc exit data copyout(i) async @@ -56,7 +55,7 @@ void foo() { #pragma acc data default(none) wait() ; -// CHECK: #pragma acc enter data wait() +// CHECK: #pragma acc enter data copyin(Var) wait() #pragma acc enter data copyin(Var) wait() // CHECK: #pragma acc exit data wait(*iPtr, i) @@ -66,7 +65,7 @@ void foo() { #pragma acc data default(none) wait(queues:*iPtr, i) ; -// CHECK: #pragma acc enter data wait(devnum: i : *iPtr, i) +// CHECK: #pragma acc enter data copyin(Var) wait(devnum: i : *iPtr, i) #pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i) // CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i) @@ -79,4 +78,26 @@ void foo() { // CHECK: #pragma acc data default(present) #pragma acc data default(present) ; + +// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) +#pragma acc data default(none) no_create(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) +// CHECK-NOT: present(i, array[1], array, array[1:2]) +#pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) +#pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly: i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) +#pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly:i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) + +// CHECK-NOT: #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) +#pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) + +// CHECK: #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) +#pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) } diff --git a/clang/test/SemaOpenACC/data-construct-ast.cpp b/clang/test/SemaOpenACC/data-construct-ast.cpp index 60ed295fcd42eb..90763daf690fee 100644 --- a/clang/test/SemaOpenACC/data-construct-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-ast.cpp @@ -27,6 +27,8 @@ void NormalFunc() { // CHECK: NullStmt #pragma acc enter data copyin(Var) // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data #pragma acc host_data use_device(Var) @@ -55,6 +57,8 @@ void TemplFunc() { // CHECK: NullStmt #pragma acc enter data copyin(Var) // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data #pragma acc host_data use_device(Var) @@ -78,6 +82,8 @@ void TemplFunc() { // CHECK: NullStmt // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data diff --git a/clang/test/SemaOpenACC/data-construct-async-clause.c b/clang/test/SemaOpenACC/data-construct-async-clause.c index 053cc976939b53..4e75c2b56a5a5c 100644 --- a/clang/test/SemaOpenACC/data-construct-async-clause.c +++ b/clang/test/SemaOpenACC/data-construct-async-clause.c @@ -5,10 +5,8 @@ void Test() { struct NotConvertible{} NC; // No special rules for this clause on the data constructs, so not much to // test that isn't covered by combined/compute. - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(I) async(I) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(I) async(I) // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(I) async(I) @@ -17,11 +15,9 @@ void Test() { #pragma acc host_data use_device(I) async(I) ; - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc data copyin(NC) async(NC) ; - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc enter data copyin(NC) async(NC) // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} @@ -32,12 +28,10 @@ void Test() { #pragma acc host_data use_device(NC) async(NC) ; - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc data copyin(I) async(I) async(I) ; - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{expected ')'}} // expected-note@+1{{to match this '('}} #pragma acc enter data copyin(I) async(I, I) diff --git a/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp b/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp new file mode 100644 index 00000000000000..fd21d60c84431f --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp @@ -0,0 +1,137 @@ +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyin(GlobalArray) pcopyin(readonly:PointerParam[Global]) present_or_copyin(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(GlobalArray) pcopyin(readonly:PointerParam[Global]) present_or_copyin(Global) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' +} + +template<auto &NTTP, typename T, typename U> +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyin(t) pcopyin(readonly: NTTP, u) present_or_copyin(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(t) pcopyin(readonly: NTTP, u) present_or_copyin(u[0:t]) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: NullStmt + + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' +} + +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses<CEVar>(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-copyin-clause.c b/clang/test/SemaOpenACC/data-construct-copyin-clause.c new file mode 100644 index 00000000000000..36d190b81480fa --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyin-clause.c @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data copyin(LocalInt) + ; +#pragma acc enter data copyin(LocalInt) + + // expected-warning@+1{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}} +#pragma acc data pcopyin(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}} +#pragma acc data present_or_copyin(LocalInt) + ; + + // Valid cases: +#pragma acc data copyin(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data copyin(LocalArray[2:1]) + ; +#pragma acc data copyin(readonly:LocalArray[2:1]) + ; + +#pragma acc data copyin(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data copyin(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data copyin(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin((float)ArrayParam[2]) + ; + // expected-error@+2{{invalid tag 'invalid' on 'copyin' clause}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(invalid:(float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'copyin' clause is not valid on 'exit data' directive}} +#pragma acc exit data copyin(LocalInt) + // expected-error@+1{{OpenACC 'pcopyin' clause is not valid on 'host_data' directive}} +#pragma acc host_data pcopyin(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct-if-ast.cpp b/clang/test/SemaOpenACC/data-construct-if-ast.cpp index a522b30357df89..24bc8ffc8fe0c4 100644 --- a/clang/test/SemaOpenACC/data-construct-if-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-if-ast.cpp @@ -52,6 +52,8 @@ void TemplFunc() { #pragma acc enter data copyin(Global) if(typename T::IntTy{}) ; // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy' // CHECK-NEXT: InitListExpr{{.*}} 'void' @@ -93,6 +95,8 @@ void TemplFunc() { // CHECK-NEXT: NullStmt // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <IntegralToBoolean> // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename struct InstTy::IntTy <NoOp> diff --git a/clang/test/SemaOpenACC/data-construct-if-clause.c b/clang/test/SemaOpenACC/data-construct-if-clause.c index 906b252d219b44..3f80bb8c4d002a 100644 --- a/clang/test/SemaOpenACC/data-construct-if-clause.c +++ b/clang/test/SemaOpenACC/data-construct-if-clause.c @@ -9,10 +9,8 @@ void Foo() { #pragma acc data default(present) if(1) if (2) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(Var) if(1) - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'enter data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc enter data copyin(Var) if(1) if (2) diff --git a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp index 40409099d80588..20d4affec1c870 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp @@ -21,11 +21,15 @@ void NormalUses() { #pragma acc data copyin(I) wait ; // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait() // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> #pragma acc exit data copyout(I) wait(some_int(), some_long()) @@ -41,6 +45,8 @@ void NormalUses() { #pragma acc data copyin(I) wait(queues:some_int(), some_long()) ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: CallExpr{{.*}}'int' @@ -52,6 +58,8 @@ void NormalUses() { // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait(devnum: some_int() :some_int(), some_long()) // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause has devnum // CHECK-NEXT: CallExpr{{.*}}'int' // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> @@ -101,12 +109,16 @@ void TemplUses(U u) { #pragma acc data copyin(I) wait ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait() // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> @@ -121,6 +133,8 @@ void TemplUses(U u) { #pragma acc data copyin(I) wait(queues: U::value, u) ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue @@ -130,6 +144,8 @@ void TemplUses(U u) { #pragma acc enter data copyin(I) wait(devnum:u:queues: U::value, u) // CHECK: OpenACCEnterDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue @@ -156,11 +172,15 @@ void TemplUses(U u) { // CHECK-NEXT: VarDecl // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: NullStmt // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> @@ -176,6 +196,8 @@ void TemplUses(U u) { // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> @@ -188,6 +210,8 @@ void TemplUses(U u) { // CHECK-NEXT: NullStmt // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' diff --git a/clang/test/SemaOpenACC/data-construct-wait-clause.c b/clang/test/SemaOpenACC/data-construct-wait-clause.c index 50a29df8b03bf0..59cd793de7435d 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-clause.c +++ b/clang/test/SemaOpenACC/data-construct-wait-clause.c @@ -7,11 +7,9 @@ int getI(); void uses() { int arr[5]; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(arr[0]) wait ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(arr[0]) wait() // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} @@ -22,23 +20,19 @@ void uses() { #pragma acc host_data use_device(arr[0]) wait(getS(), getI()) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(arr[0]) wait(devnum:getS(): getI()) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(arr[0]) wait(devnum:getS(): queues: getI()) wait(devnum:getI(): queues: getS(), getI(), 5) // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc exit data copyout(arr[0]) wait(devnum:NC : 5) - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc data copyin(arr[0]) wait(devnum:5 : NC) ; - // expected-warning@+4{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+3{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} // expected-error@+2{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 3f95f4055802a3..2ae1d14b850748 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -23,7 +23,6 @@ void AtLeastOneOf() { // Data #pragma acc data copy(Var) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(Var) ; // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} @@ -63,7 +62,6 @@ void AtLeastOneOf() { ; // Enter Data - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(Var) #pragma acc enter data create(Var) // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits