pdhaliwal created this revision. pdhaliwal added reviewers: jdoerfert, JonChesterfield, ronlieb, tianshilei1992. Herald added subscribers: guansong, yaxunl. pdhaliwal requested review of this revision. Herald added subscribers: cfe-commits, sstefan1. Herald added a project: clang.
There are two preconditions to reproduce the issue, 1. Use -save-temps option 2. Provide the -o option with name equal to the input file name without the file extension. For e.g. clang a.c -o a With the -o specified, the OffloadWrapperJobAction will produce the object file with same name as host code object file. Due to this clash, the OffloadWrapperAction overwrites the initial host object file, which results in lld error. This also fixes the issue mentioned in D96769 <https://reviews.llvm.org/D96769>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D97273 Files: clang/lib/Driver/Driver.cpp clang/test/Driver/openmp-offload-gpu.c Index: clang/test/Driver/openmp-offload-gpu.c =================================================================== --- clang/test/Driver/openmp-offload-gpu.c +++ clang/test/Driver/openmp-offload-gpu.c @@ -300,3 +300,9 @@ // RUN: | FileCheck -check-prefix=OPENMP_NVPTX_WRAPPERS %s // OPENMP_NVPTX_WRAPPERS: clang{{.*}}"-cc1"{{.*}}"-triple" "nvptx64-nvidia-cuda" // OPENMP_NVPTX_WRAPPERS-SAME: "-internal-isystem" "{{.*}}openmp_wrappers" + +// RUN: %clang -### -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda \ +// RUN: -save-temps -no-canonical-prefixes -ccc-print-bindings %s -o openmp-offload-gpu 2>&1 \ +// RUN: | FileCheck -check-prefix=SAVE_TEMPS_NAMES %s + +// SAVE_TEMPS_NAMES-NOT: "GNU::Linker"{{.*}}["[[SAVE_TEMPS_INPUT1:.*\.o]]", "[[SAVE_TEMPS_INPUT1]]"] Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -4683,11 +4683,12 @@ /*CreatePrefixForHost=*/!!A->getOffloadingHostActiveKinds() && !AtTopLevel); if (isa<OffloadWrapperJobAction>(JA)) { - OffloadingPrefix += "-wrapper"; if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) BaseInput = FinalOutput->getValue(); else BaseInput = getDefaultImageName(); + BaseInput = + C.getArgs().MakeArgString(std::string(BaseInput) + "-wrapper"); } Result = InputInfo(A, GetNamedOutputPath(C, *JA, BaseInput, BoundArch, AtTopLevel, MultipleArchs,
Index: clang/test/Driver/openmp-offload-gpu.c =================================================================== --- clang/test/Driver/openmp-offload-gpu.c +++ clang/test/Driver/openmp-offload-gpu.c @@ -300,3 +300,9 @@ // RUN: | FileCheck -check-prefix=OPENMP_NVPTX_WRAPPERS %s // OPENMP_NVPTX_WRAPPERS: clang{{.*}}"-cc1"{{.*}}"-triple" "nvptx64-nvidia-cuda" // OPENMP_NVPTX_WRAPPERS-SAME: "-internal-isystem" "{{.*}}openmp_wrappers" + +// RUN: %clang -### -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda \ +// RUN: -save-temps -no-canonical-prefixes -ccc-print-bindings %s -o openmp-offload-gpu 2>&1 \ +// RUN: | FileCheck -check-prefix=SAVE_TEMPS_NAMES %s + +// SAVE_TEMPS_NAMES-NOT: "GNU::Linker"{{.*}}["[[SAVE_TEMPS_INPUT1:.*\.o]]", "[[SAVE_TEMPS_INPUT1]]"] Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -4683,11 +4683,12 @@ /*CreatePrefixForHost=*/!!A->getOffloadingHostActiveKinds() && !AtTopLevel); if (isa<OffloadWrapperJobAction>(JA)) { - OffloadingPrefix += "-wrapper"; if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) BaseInput = FinalOutput->getValue(); else BaseInput = getDefaultImageName(); + BaseInput = + C.getArgs().MakeArgString(std::string(BaseInput) + "-wrapper"); } Result = InputInfo(A, GetNamedOutputPath(C, *JA, BaseInput, BoundArch, AtTopLevel, MultipleArchs,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits