Author: Dan McGregor Date: 2025-06-05T08:24:57-04:00 New Revision: b5e84ca7407138ec475409a2fad944045178b18a
URL: https://github.com/llvm/llvm-project/commit/b5e84ca7407138ec475409a2fad944045178b18a DIFF: https://github.com/llvm/llvm-project/commit/b5e84ca7407138ec475409a2fad944045178b18a.diff LOG: [Clang] Remap paths in OpenMP runtime calls (#82541) (#141250) Apply the debug prefix mapping to the OpenMP location strings. Fixes https://github.com/llvm/llvm-project/issues/82541 Added: clang/test/CodeGen/openmp-prefix-map.c Modified: clang/lib/CodeGen/CGOpenMPRuntime.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index e458d437d085a..09e3ccc380ae3 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1352,7 +1352,12 @@ static StringRef getIdentStringFromSourceLocation(CodeGenFunction &CGF, llvm::raw_svector_ostream OS(Buffer); // Build debug location PresumedLoc PLoc = CGF.getContext().getSourceManager().getPresumedLoc(Loc); - OS << ";" << PLoc.getFilename() << ";"; + OS << ";"; + if (auto *DbgInfo = CGF.getDebugInfo()) + OS << DbgInfo->remapDIPath(PLoc.getFilename()); + else + OS << PLoc.getFilename(); + OS << ";"; if (const auto *FD = dyn_cast_or_null<FunctionDecl>(CGF.CurFuncDecl)) OS << FD->getQualifiedNameAsString(); OS << ";" << PLoc.getLine() << ";" << PLoc.getColumn() << ";;"; @@ -1370,10 +1375,14 @@ llvm::Value *CGOpenMPRuntime::emitUpdateLocation(CodeGenFunction &CGF, SrcLocStr = OMPBuilder.getOrCreateDefaultSrcLocStr(SrcLocStrSize); } else { std::string FunctionName; + std::string FileName; if (const auto *FD = dyn_cast_or_null<FunctionDecl>(CGF.CurFuncDecl)) FunctionName = FD->getQualifiedNameAsString(); PresumedLoc PLoc = CGF.getContext().getSourceManager().getPresumedLoc(Loc); - const char *FileName = PLoc.getFilename(); + if (auto *DbgInfo = CGF.getDebugInfo()) + FileName = DbgInfo->remapDIPath(PLoc.getFilename()); + else + FileName = PLoc.getFilename(); unsigned Line = PLoc.getLine(); unsigned Column = PLoc.getColumn(); SrcLocStr = OMPBuilder.getOrCreateSrcLocStr(FunctionName, FileName, Line, @@ -8840,10 +8849,14 @@ emitMappingInformation(CodeGenFunction &CGF, llvm::OpenMPIRBuilder &OMPBuilder, ExprName = MapExprs.getMapDecl()->getNameAsString(); } + std::string FileName; PresumedLoc PLoc = CGF.getContext().getSourceManager().getPresumedLoc(Loc); - return OMPBuilder.getOrCreateSrcLocStr(PLoc.getFilename(), ExprName, - PLoc.getLine(), PLoc.getColumn(), - SrcLocStrSize); + if (auto *DbgInfo = CGF.getDebugInfo()) + FileName = DbgInfo->remapDIPath(PLoc.getFilename()); + else + FileName = PLoc.getFilename(); + return OMPBuilder.getOrCreateSrcLocStr(FileName, ExprName, PLoc.getLine(), + PLoc.getColumn(), SrcLocStrSize); } /// Emit the arrays used to pass the captures and map information to the /// offloading runtime library. If there is no map or capture information, diff --git a/clang/test/CodeGen/openmp-prefix-map.c b/clang/test/CodeGen/openmp-prefix-map.c new file mode 100644 index 0000000000000..be3429c267215 --- /dev/null +++ b/clang/test/CodeGen/openmp-prefix-map.c @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -triple i386-unknown-unknown -debug-info-kind=standalone -fopenmp %s -emit-llvm -o - -disable-llvm-optzns -fdebug-prefix-map=%S=.| FileCheck -DPREFIX=%S %s + +// CHECK-NOT: @{{[0-9]+}} = private unnamed_addr constant [{{[0-9]+}} x i8] c";[[PREFIX]]{{.*}}.c;foo;{{[0-9]+}};{{[0-9]+}};;\00" + +void work1(int, int); +void work2(int, int); +void work12(int, int); + +void foo(int q) { + int p = 2; + + #pragma omp parallel firstprivate(q, p) + work1(p, q); + + #pragma omp parallel for firstprivate(p, q) + for (int i = 0; i < q; i++) + work2(i, p); + + #pragma omp target teams firstprivate(p) + work12(p, p); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits