RitanyaB created this revision. RitanyaB added reviewers: soumitra, sandeepkosuri, koops, ABataev. Herald added a project: All. RitanyaB requested review of this revision. Herald added a reviewer: jdoerfert. Herald added subscribers: cfe-commits, jplehr, sstefan1. Herald added a project: clang.
This patch adds support for the following edge cases in declare target - #pragma omp declare target(variable) #pragma omp declare target to(variable) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D157229 Files: clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/declare_target_variables_ast_print.cpp Index: clang/test/OpenMP/declare_target_variables_ast_print.cpp =================================================================== --- clang/test/OpenMP/declare_target_variables_ast_print.cpp +++ clang/test/OpenMP/declare_target_variables_ast_print.cpp @@ -27,6 +27,10 @@ }; static target S; +static int var3 = 100; +static int *ptr_3 = &var3; +static char c = 'a'; + #pragma omp declare target int target_var = variable; float target_var1 = variable2; @@ -36,6 +40,9 @@ declare **obj3 = &obj2; target *S1 = &S; #pragma omp end declare target +#pragma omp declare target(ptr_3) +#pragma omp declare target to(c) + // CHECK: #pragma omp declare target // CHECK-NEXT: static int variable = 100; // CHECK-NEXT: #pragma omp end declare target @@ -87,7 +94,15 @@ // CHECK-NEXT: #pragma omp declare target // CHECK-NEXT: static target S; // CHECK-NEXT: #pragma omp end declare target - +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static int var3 = 100; +// CHECK-NEXT: #pragma omp end declare target +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static int *ptr_3 = &var3; +// CHECK-NEXT: #pragma omp end declare target +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static char c = 'a'; +// CHECK-NEXT: #pragma omp end declare target // CHECK-NEXT: #pragma omp declare target // CHECK-NEXT: int target_var = variable; // CHECK-NEXT: #pragma omp end declare target Index: clang/lib/Sema/SemaOpenMP.cpp =================================================================== --- clang/lib/Sema/SemaOpenMP.cpp +++ clang/lib/Sema/SemaOpenMP.cpp @@ -23102,6 +23102,10 @@ if (ASTMutationListener *ML = Context.getASTMutationListener()) ML->DeclarationMarkedOpenMPDeclareTarget(ND, A); checkDeclIsAllowedInOpenMPTarget(nullptr, ND, Loc); + if (auto *VD = dyn_cast<VarDecl>(ND); + LangOpts.OpenMP && VD && VD->hasAttr<OMPDeclareTargetDeclAttr>() && + VD->hasGlobalStorage()) + ActOnOpenMPDeclareTargetInitializer(ND); } static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR,
Index: clang/test/OpenMP/declare_target_variables_ast_print.cpp =================================================================== --- clang/test/OpenMP/declare_target_variables_ast_print.cpp +++ clang/test/OpenMP/declare_target_variables_ast_print.cpp @@ -27,6 +27,10 @@ }; static target S; +static int var3 = 100; +static int *ptr_3 = &var3; +static char c = 'a'; + #pragma omp declare target int target_var = variable; float target_var1 = variable2; @@ -36,6 +40,9 @@ declare **obj3 = &obj2; target *S1 = &S; #pragma omp end declare target +#pragma omp declare target(ptr_3) +#pragma omp declare target to(c) + // CHECK: #pragma omp declare target // CHECK-NEXT: static int variable = 100; // CHECK-NEXT: #pragma omp end declare target @@ -87,7 +94,15 @@ // CHECK-NEXT: #pragma omp declare target // CHECK-NEXT: static target S; // CHECK-NEXT: #pragma omp end declare target - +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static int var3 = 100; +// CHECK-NEXT: #pragma omp end declare target +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static int *ptr_3 = &var3; +// CHECK-NEXT: #pragma omp end declare target +// CHECK-NEXT: #pragma omp declare target +// CHECK-NEXT: static char c = 'a'; +// CHECK-NEXT: #pragma omp end declare target // CHECK-NEXT: #pragma omp declare target // CHECK-NEXT: int target_var = variable; // CHECK-NEXT: #pragma omp end declare target Index: clang/lib/Sema/SemaOpenMP.cpp =================================================================== --- clang/lib/Sema/SemaOpenMP.cpp +++ clang/lib/Sema/SemaOpenMP.cpp @@ -23102,6 +23102,10 @@ if (ASTMutationListener *ML = Context.getASTMutationListener()) ML->DeclarationMarkedOpenMPDeclareTarget(ND, A); checkDeclIsAllowedInOpenMPTarget(nullptr, ND, Loc); + if (auto *VD = dyn_cast<VarDecl>(ND); + LangOpts.OpenMP && VD && VD->hasAttr<OMPDeclareTargetDeclAttr>() && + VD->hasGlobalStorage()) + ActOnOpenMPDeclareTargetInitializer(ND); } static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits