Author: erichkeane Date: 2024-12-13T07:50:29-08:00 New Revision: 1da0730ba5994537119ed61205a599cb3929c43a
URL: https://github.com/llvm/llvm-project/commit/1da0730ba5994537119ed61205a599cb3929c43a DIFF: https://github.com/llvm/llvm-project/commit/1da0730ba5994537119ed61205a599cb3929c43a.diff LOG: [OpenACC] enable 'copyout' clause sema for data constructs Same as the previous few, this just enables copyout for data constructs and ensures we have sufficient test coverage. Added: clang/test/SemaOpenACC/data-construct-copyout-ast.cpp clang/test/SemaOpenACC/data-construct-copyout-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 91a5cd0d71b2f0..6906fd00822fcb 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -981,11 +981,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyInClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyOutClause( 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 d5d034f5d0bc9f..65ab0158b4852d 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -17,8 +17,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) #pragma acc enter data copyin(Var) ; -// CHECK: #pragma acc exit data -// CHECK-NOT: copyout(Var) +// CHECK: #pragma acc exit data copyout(Var) #pragma acc exit data copyout(Var) ; // CHECK: #pragma acc host_data @@ -36,7 +35,7 @@ void foo() { // 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]) +// CHECK: #pragma acc exit data copyout(Var) if(i == array[1]) #pragma acc exit data copyout(Var) if(i == array[1]) ; // CHECK: #pragma acc host_data if(i == array[1]) @@ -48,7 +47,7 @@ void foo() { ; // CHECK: #pragma acc enter data copyin(i) async(i) #pragma acc enter data copyin(i) async(i) -// CHECK: #pragma acc exit data async +// CHECK: #pragma acc exit data copyout(i) async #pragma acc exit data copyout(i) async // CHECK: #pragma acc data default(none) wait @@ -58,7 +57,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) wait() #pragma acc enter data copyin(Var) wait() -// CHECK: #pragma acc exit data wait(*iPtr, i) +// CHECK: #pragma acc exit data copyout(Var) wait(*iPtr, i) #pragma acc exit data copyout(Var) wait(*iPtr, i) // CHECK: #pragma acc data default(none) wait(queues: *iPtr, i) @@ -68,7 +67,7 @@ void foo() { // 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) +// CHECK: #pragma acc exit data copyout(Var) wait(devnum: i : queues: *iPtr, i) #pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i) // CHECK: #pragma acc data default(none) @@ -95,7 +94,7 @@ void foo() { // 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]) +// CHECK: #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]) diff --git a/clang/test/SemaOpenACC/data-construct-ast.cpp b/clang/test/SemaOpenACC/data-construct-ast.cpp index 90763daf690fee..f299fd04581a72 100644 --- a/clang/test/SemaOpenACC/data-construct-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-ast.cpp @@ -31,6 +31,8 @@ void NormalFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc host_data use_device(Var) while (Var); // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data @@ -61,6 +63,8 @@ void TemplFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc host_data use_device(Var) while (Var); // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data @@ -86,6 +90,8 @@ void TemplFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data // CHECK-NEXT: WhileStmt diff --git a/clang/test/SemaOpenACC/data-construct-async-clause.c b/clang/test/SemaOpenACC/data-construct-async-clause.c index 4e75c2b56a5a5c..7173b2f0be7dd9 100644 --- a/clang/test/SemaOpenACC/data-construct-async-clause.c +++ b/clang/test/SemaOpenACC/data-construct-async-clause.c @@ -8,7 +8,6 @@ void Test() { #pragma acc data copyin(I) async(I) ; #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) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} // expected-error@+1{{OpenACC 'async' clause is not valid on 'host_data' directive}} @@ -20,7 +19,6 @@ void Test() { ; // 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}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc exit data copyout(NC) async(NC) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} diff --git a/clang/test/SemaOpenACC/data-construct-copyout-ast.cpp b/clang/test/SemaOpenACC/data-construct-copyout-ast.cpp new file mode 100644 index 00000000000000..38e6e7b476fe59 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyout-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 copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyout clause : zero + // 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_copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt + +#pragma acc exit data copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyout clause : zero + // 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_copyout 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 copyout(t) pcopyout(zero: NTTP, u) present_or_copyout(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyout 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 exit data copyout(t) pcopyout(zero: NTTP, u) present_or_copyout(u[0:t]) + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyout 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: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyout clause : zero + // 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_copyout 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: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyout clause : zero + // 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_copyout 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-copyout-clause.c b/clang/test/SemaOpenACC/data-construct-copyout-clause.c new file mode 100644 index 00000000000000..77c19d80ca7b36 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyout-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 copyout(LocalInt) + ; +#pragma acc exit data copyout(LocalInt) + + // expected-warning@+1{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}} +#pragma acc data pcopyout(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}} +#pragma acc data present_or_copyout(LocalInt) + ; + + // Valid cases: +#pragma acc data copyout(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data copyout(LocalArray[2:1]) + ; +#pragma acc data copyout(zero:LocalArray[2:1]) + ; + +#pragma acc data copyout(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 copyout(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 copyout(+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 copyout(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 copyout(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 copyout((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 copyout((float)ArrayParam[2]) + ; + // expected-error@+2{{invalid tag 'invalid' on 'copyout' 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 copyout(invalid:(float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'copyout' clause is not valid on 'enter data' directive}} +#pragma acc enter data copyout(LocalInt) + // expected-error@+1{{OpenACC 'pcopyout' clause is not valid on 'host_data' directive}} +#pragma acc host_data pcopyout(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct-if-ast.cpp b/clang/test/SemaOpenACC/data-construct-if-ast.cpp index 24bc8ffc8fe0c4..3b810a724c51ee 100644 --- a/clang/test/SemaOpenACC/data-construct-if-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-if-ast.cpp @@ -62,6 +62,8 @@ void TemplFunc() { #pragma acc exit data copyout(Global) if(T::SomeFloat) ; // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T' @@ -104,6 +106,8 @@ void TemplFunc() { // CHECK-NEXT: NullStmt // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean> // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue> diff --git a/clang/test/SemaOpenACC/data-construct-if-clause.c b/clang/test/SemaOpenACC/data-construct-if-clause.c index 3f80bb8c4d002a..0a7989e80fc373 100644 --- a/clang/test/SemaOpenACC/data-construct-if-clause.c +++ b/clang/test/SemaOpenACC/data-construct-if-clause.c @@ -15,9 +15,7 @@ void Foo() { // expected-note@+1{{previous clause is here}} #pragma acc enter data copyin(Var) if(1) if (2) - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(Var) if(1) - // expected-warning@+3{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'exit data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc exit data copyout(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 20d4affec1c870..7fb82313669df9 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp @@ -34,6 +34,8 @@ void NormalUses() { // CHECK-NEXT: <<<NULL>>> #pragma acc exit data copyout(I) wait(some_int(), some_long()) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: CallExpr{{.*}}'int' @@ -72,6 +74,8 @@ void NormalUses() { // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' #pragma acc exit data copyout(I) wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long()) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: CallExpr{{.*}}'int' // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> @@ -124,6 +128,8 @@ void TemplUses(U u) { #pragma acc exit data copyout(I) wait(U::value, u) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue @@ -154,6 +160,8 @@ void TemplUses(U u) { #pragma acc exit data copyout(I) wait(devnum:u: U::value, u) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U' // CHECK-NEXT: wait clause has devnum // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue @@ -185,6 +193,8 @@ void TemplUses(U u) { // CHECK-NEXT: <<<NULL>>> // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<<NULL>>> // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> @@ -226,6 +236,8 @@ void TemplUses(U u) { // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt' // CHECK-NEXT: wait clause has devnum // 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 59cd793de7435d..dffcba34e7b333 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-clause.c +++ b/clang/test/SemaOpenACC/data-construct-wait-clause.c @@ -12,7 +12,6 @@ void uses() { #pragma acc enter data copyin(arr[0]) wait() - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(arr[0]) wait(getS(), getI()) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} @@ -25,7 +24,6 @@ void uses() { #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) diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 2ae1d14b850748..01ccaeba81b488 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -25,7 +25,6 @@ void AtLeastOneOf() { ; #pragma acc data copyin(Var) ; - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc data copyout(Var) ; #pragma acc data create(Var) @@ -76,7 +75,6 @@ void AtLeastOneOf() { #pragma acc enter data // Exit Data - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(Var) // expected-warning@+1{{OpenACC clause 'delete' not yet implemented}} #pragma acc exit data delete(Var) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits