[clang] Fix for codegen Crash in Clang when using locator omp_all_memory with depobj construct (PR #114221)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 4 00:18:19 PST 2024
https://github.com/chandraghale updated https://github.com/llvm/llvm-project/pull/114221
>From 4e6d8c1edb73fe08659519d8798cab162875ebc0 Mon Sep 17 00:00:00 2001
From: Chandra Ghale <ghale at pe31.hpc.amslabs.hpecorp.net>
Date: Wed, 30 Oct 2024 07:18:06 -0500
Subject: [PATCH 1/2] Fix for codegen Crash in Clang when using locator
omp_all_memory with depobj
---
clang/lib/CodeGen/CGStmtOpenMP.cpp | 10 ++++++----
clang/test/OpenMP/depobj_codegen.cpp | 2 ++
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index 1c32a675380c7f..5125044b2aa629 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -5556,12 +5556,14 @@ void CodeGenFunction::EmitOMPDepobjDirective(const OMPDepobjDirective &S) {
const auto *DO = S.getSingleClause<OMPDepobjClause>();
LValue DOLVal = EmitLValue(DO->getDepobj());
if (const auto *DC = S.getSingleClause<OMPDependClause>()) {
- OMPTaskDataTy::DependData Dependencies(DC->getDependencyKind(),
- DC->getModifier());
- Dependencies.DepExprs.append(DC->varlist_begin(), DC->varlist_end());
+ // Build list and emit dependences
+ OMPTaskDataTy Data;
+ buildDependences(S, Data);
+ for (auto &Dep : Data.Dependences) {
Address DepAddr = CGM.getOpenMPRuntime().emitDepobjDependClause(
- *this, Dependencies, DC->getBeginLoc());
+ *this, Dep, DC->getBeginLoc());
EmitStoreOfScalar(DepAddr.emitRawPointer(*this), DOLVal);
+ }
return;
}
if (const auto *DC = S.getSingleClause<OMPDestroyClause>()) {
diff --git a/clang/test/OpenMP/depobj_codegen.cpp b/clang/test/OpenMP/depobj_codegen.cpp
index 92751ac44b8c78..00cf43f54d6695 100644
--- a/clang/test/OpenMP/depobj_codegen.cpp
+++ b/clang/test/OpenMP/depobj_codegen.cpp
@@ -36,6 +36,8 @@ int main(int argc, char **argv) {
#pragma omp depobj(b) update(mutexinoutset)
#pragma omp depobj(a) depend(iterator(char *p = argv[argc]:argv[0]:-1), out: p[0])
(void)tmain(a), tmain(b);
+ omp_depend_t obj;
+#pragma omp depobj(obj) depend(inout: omp_all_memory)
return 0;
}
>From 30eb82552f431604695ac55e584bb2bfcf6a927d Mon Sep 17 00:00:00 2001
From: Chandra Ghale <ghale at pe31.hpc.amslabs.hpecorp.net>
Date: Mon, 4 Nov 2024 02:13:38 -0600
Subject: [PATCH 2/2] clang-format fix
---
clang/lib/CodeGen/CGStmtOpenMP.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index 5125044b2aa629..390516fea38498 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -5560,9 +5560,9 @@ void CodeGenFunction::EmitOMPDepobjDirective(const OMPDepobjDirective &S) {
OMPTaskDataTy Data;
buildDependences(S, Data);
for (auto &Dep : Data.Dependences) {
- Address DepAddr = CGM.getOpenMPRuntime().emitDepobjDependClause(
- *this, Dep, DC->getBeginLoc());
- EmitStoreOfScalar(DepAddr.emitRawPointer(*this), DOLVal);
+ Address DepAddr = CGM.getOpenMPRuntime().emitDepobjDependClause(
+ *this, Dep, DC->getBeginLoc());
+ EmitStoreOfScalar(DepAddr.emitRawPointer(*this), DOLVal);
}
return;
}
More information about the cfe-commits
mailing list