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

Reply via email to