https://github.com/ahatanak updated https://github.com/llvm/llvm-project/pull/186208
>From 64cef86104581f9854cd6ce888cccbe26da01589 Mon Sep 17 00:00:00 2001 From: Akira Hatanaka <[email protected]> Date: Thu, 12 Mar 2026 11:02:42 -0700 Subject: [PATCH 1/2] [clang][test] Restore UNSUPPORTED: darwin for OpenMP offload tests OpenMP offloading to AMDGPU is not supported on Darwin. offload-Xarch.c was originally marked UNSUPPORTED on Darwin in a32efd8edc6e, which noted that "there's some handling missing somewhere else that likely won't ever be added." That annotation was likely accidentally removed by befb52db94cc ("Remove use of temporary toolchains for offload deduction"), which presumably intended to fix the Darwin failure but did not. The failure manifests as an assertion in MachO::getLinkerVersion, which expects the linker version obtained via `-mlinker-version` and the version cached during the previous invocation to match. TranslateOpenMPTargetArgs drops all OPT_m_Group options (including `-mlinker-version`) when the device triple differs from the host triple. This causes the DriverArgs passed to Darwin::addClangTargetOptions (via AMDGPUOpenMPToolChain::addClangTargetOptions) to be missing `-mlinker-version`, while an earlier call to getLinkerVersion from the host side has already cached a non-zero version from the full host args, triggering the mismatch assertion. The same failure affects openmp-offload-gpu.c for the same reason. The tests currently pass because 6758becb8f19 ("[ObjC] Support emission of selector stubs calls instead of objc_msgSend."), which triggered the assertion, was reverted. This fix is a prerequisite for reapplying that commit. --- clang/test/Driver/offload-Xarch.c | 2 ++ clang/test/Driver/openmp-offload-gpu.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/clang/test/Driver/offload-Xarch.c b/clang/test/Driver/offload-Xarch.c index 73943f3e9c7f8..3b3c7faf6ec4a 100644 --- a/clang/test/Driver/offload-Xarch.c +++ b/clang/test/Driver/offload-Xarch.c @@ -1,3 +1,5 @@ +// UNSUPPORTED: target={{.*darwin.*}} + // RUN: %clang --target=x86_64-unknown-linux-gnu -x cuda %s -Xarch_nvptx64 -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s // RUN: %clang -x cuda %s -Xarch_device -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s // RUN: %clang -x hip %s -Xarch_amdgcn -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s diff --git a/clang/test/Driver/openmp-offload-gpu.c b/clang/test/Driver/openmp-offload-gpu.c index fb1bc9ffdbbd4..9dca94a30cda2 100644 --- a/clang/test/Driver/openmp-offload-gpu.c +++ b/clang/test/Driver/openmp-offload-gpu.c @@ -1,3 +1,5 @@ +// UNSUPPORTED: target={{.*darwin.*}} + /// /// Perform several driver tests for OpenMP offloading /// >From eb9de3dcea95308f05d3e980c6f73b37e88473aa Mon Sep 17 00:00:00 2001 From: Akira Hatanaka <[email protected]> Date: Thu, 12 Mar 2026 16:35:42 -0700 Subject: [PATCH 2/2] Fix TranslateOpenMPTargetArgs dropping -mlinker-version TranslateOpenMPTargetArgs drops OPT_m_Group options, including `-mlinker-version`, when the device triple differs from the host triple. This can cause an assertion failure in MachO::getLinkerVersion when running offload-Xarch.c and openmp-offload-gpu.c on Darwin as it expects the linker version obtained via `-mlinker-version` and the version cached during a previous invocation to match. Fix this by preserving `-mlinker-version` when filtering OPT_m_Group options. The tests currently pass because 6758becb8f19 ("[ObjC] Support emission of selector stubs calls instead of objc_msgSend."), which triggered the assertion, was reverted. This fix is a prerequisite for reapplying that commit. --- clang/lib/Driver/ToolChain.cpp | 3 ++- clang/test/Driver/offload-Xarch.c | 2 -- clang/test/Driver/openmp-offload-gpu.c | 2 -- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index ac66ccbae6f39..cff13e27b927a 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -1765,7 +1765,8 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs( // Pass code object version to device toolchain // to correctly set metadata in intermediate files. if (SameTripleAsHost || - A->getOption().matches(options::OPT_mcode_object_version_EQ)) + A->getOption().matches(options::OPT_mcode_object_version_EQ) || + A->getOption().matches(options::OPT_mlinker_version_EQ)) DAL->append(A); else Modified = true; diff --git a/clang/test/Driver/offload-Xarch.c b/clang/test/Driver/offload-Xarch.c index 3b3c7faf6ec4a..73943f3e9c7f8 100644 --- a/clang/test/Driver/offload-Xarch.c +++ b/clang/test/Driver/offload-Xarch.c @@ -1,5 +1,3 @@ -// UNSUPPORTED: target={{.*darwin.*}} - // RUN: %clang --target=x86_64-unknown-linux-gnu -x cuda %s -Xarch_nvptx64 -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s // RUN: %clang -x cuda %s -Xarch_device -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s // RUN: %clang -x hip %s -Xarch_amdgcn -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s diff --git a/clang/test/Driver/openmp-offload-gpu.c b/clang/test/Driver/openmp-offload-gpu.c index 9dca94a30cda2..fb1bc9ffdbbd4 100644 --- a/clang/test/Driver/openmp-offload-gpu.c +++ b/clang/test/Driver/openmp-offload-gpu.c @@ -1,5 +1,3 @@ -// UNSUPPORTED: target={{.*darwin.*}} - /// /// Perform several driver tests for OpenMP offloading /// _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
