This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGe20d64c3d9d8: [Clang][OpenMP] Fixed an issue of segment fault when using target nowait (authored by tianshilei1992).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89844/new/ https://reviews.llvm.org/D89844 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp openmp/libomptarget/test/offloading/bug47654.cpp Index: openmp/libomptarget/test/offloading/bug47654.cpp =================================================================== --- /dev/null +++ openmp/libomptarget/test/offloading/bug47654.cpp @@ -0,0 +1,29 @@ +// RUN: %libomptarget-compilexx-run-and-check-aarch64-unknown-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-powerpc64-ibm-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-powerpc64le-ibm-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-x86_64-pc-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-nvptx64-nvidia-cuda + +#include <cassert> +#include <iostream> + +int main(int argc, char *argv[]) { + int i = 0, j = 0; + +#pragma omp target map(tofrom : i, j) nowait + { + i = 1; + j = 2; + } + +#pragma omp taskwait + + assert(i == 1); + assert(j == 2); + + std::cout << "PASS\n"; + + return 0; +} + +// CHECK: PASS Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -9664,11 +9664,10 @@ TargetDataInfo Info; // Fill up the arrays and create the arguments. emitOffloadingArrays(CGF, CombinedInfo, Info); - bool HasDependClauses = D.hasClausesOfKind<OMPDependClause>(); emitOffloadingArraysArgument(CGF, Info.BasePointersArray, Info.PointersArray, Info.SizesArray, Info.MapTypesArray, Info.MappersArray, Info, - {/*ForEndTask=*/false, HasDependClauses}); + {/*ForEndTask=*/false, RequiresOuterTask}); InputInfo.NumberOfTargetItems = Info.NumberOfPtrs; InputInfo.BasePointersArray = Address(Info.BasePointersArray, CGM.getPointerAlign());
Index: openmp/libomptarget/test/offloading/bug47654.cpp =================================================================== --- /dev/null +++ openmp/libomptarget/test/offloading/bug47654.cpp @@ -0,0 +1,29 @@ +// RUN: %libomptarget-compilexx-run-and-check-aarch64-unknown-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-powerpc64-ibm-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-powerpc64le-ibm-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-x86_64-pc-linux-gnu +// RUN: %libomptarget-compilexx-run-and-check-nvptx64-nvidia-cuda + +#include <cassert> +#include <iostream> + +int main(int argc, char *argv[]) { + int i = 0, j = 0; + +#pragma omp target map(tofrom : i, j) nowait + { + i = 1; + j = 2; + } + +#pragma omp taskwait + + assert(i == 1); + assert(j == 2); + + std::cout << "PASS\n"; + + return 0; +} + +// CHECK: PASS Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -9664,11 +9664,10 @@ TargetDataInfo Info; // Fill up the arrays and create the arguments. emitOffloadingArrays(CGF, CombinedInfo, Info); - bool HasDependClauses = D.hasClausesOfKind<OMPDependClause>(); emitOffloadingArraysArgument(CGF, Info.BasePointersArray, Info.PointersArray, Info.SizesArray, Info.MapTypesArray, Info.MappersArray, Info, - {/*ForEndTask=*/false, HasDependClauses}); + {/*ForEndTask=*/false, RequiresOuterTask}); InputInfo.NumberOfTargetItems = Info.NumberOfPtrs; InputInfo.BasePointersArray = Address(Info.BasePointersArray, CGM.getPointerAlign());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits