aboutsummaryrefslogtreecommitdiff
path: root/clang
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2018-04-16 20:34:41 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2018-04-16 20:34:41 +0000
commit2c1dffece66610e30cc71b710b52f855a3738e43 (patch)
treef7da8421d34e255691aade126b8e2e7525250f4a /clang
parent7c55265c2dfad74f91530f86a61357e22a472dfa (diff)
downloadllvm-2c1dffece66610e30cc71b710b52f855a3738e43.zip
llvm-2c1dffece66610e30cc71b710b52f855a3738e43.tar.gz
llvm-2c1dffece66610e30cc71b710b52f855a3738e43.tar.bz2
[OPENMP] Allow to use declare target variables in map clauses
Global variables marked as declare target are allowed to be used in map clauses. Patch fixes the crash of the compiler on the declare target variables in map clauses. llvm-svn: 330156
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CGOpenMPRuntime.cpp17
-rw-r--r--clang/test/OpenMP/declare_target_codegen.cpp2
2 files changed, 8 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 7a4c2a8..d301a4c 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -6799,16 +6799,13 @@ public:
if (const auto *VD =
dyn_cast_or_null<VarDecl>(I->getAssociatedDeclaration())) {
if (llvm::Optional<OMPDeclareTargetDeclAttr::MapTypeTy> Res =
- isDeclareTargetDeclaration(VD)) {
- assert(*Res == OMPDeclareTargetDeclAttr::MT_Link &&
- "Declare target link is expected.");
- // Avoid warning in release build.
- (void)*Res;
- IsLink = true;
- BP = CGF.CGM.getOpenMPRuntime()
- .getAddrOfDeclareTargetLink(VD)
- .getPointer();
- }
+ isDeclareTargetDeclaration(VD))
+ if (*Res == OMPDeclareTargetDeclAttr::MT_Link) {
+ IsLink = true;
+ BP = CGF.CGM.getOpenMPRuntime()
+ .getAddrOfDeclareTargetLink(VD)
+ .getPointer();
+ }
}
// If the variable is a pointer and is being dereferenced (i.e. is not
diff --git a/clang/test/OpenMP/declare_target_codegen.cpp b/clang/test/OpenMP/declare_target_codegen.cpp
index ad6718c6..86c0c02 100644
--- a/clang/test/OpenMP/declare_target_codegen.cpp
+++ b/clang/test/OpenMP/declare_target_codegen.cpp
@@ -45,7 +45,7 @@ int maini1() {
static long aa = 32;
// CHECK-DAG: define void @__omp_offloading_{{.*}}maini1{{.*}}_l[[@LINE+1]](i32* dereferenceable{{.*}}, i64 {{.*}}, i64 {{.*}})
#pragma omp target map(tofrom \
- : a)
+ : a, b)
{
static long aaa = 23;
a = foo() + bar() + b + c + d + aa + aaa;