Skip to content

Commit 89c94c2

Browse files
committed
[clang][Driver] Get darwin -Xarch_ working for subtypes, again.
35ca7d9 broke 471c4f8 for -arch flags that don't map 1:1 to the triple arch. This has been broken for the many years since. It hasn't mattered much since then, mostly because few people use it, but also because it works for x86_64/i386, armv7/armv7s don't differ much, arm64 is its own arch, and arm64/arm64_32 have different arches (and it's a rare combination anyway). But arm64/arm64e exposes this issue again. Patch by: Justin Bogner <[email protected]> with some added tests.
1 parent da9a703 commit 89c94c2

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2487,12 +2487,9 @@ DerivedArgList *MachO::TranslateArgs(const DerivedArgList &Args,
24872487
if (A->getOption().matches(options::OPT_Xarch__)) {
24882488
// Skip this argument unless the architecture matches either the toolchain
24892489
// triple arch, or the arch being bound.
2490-
llvm::Triple::ArchType XarchArch =
2491-
tools::darwin::getArchTypeForMachOArchName(A->getValue(0));
2492-
if (!(XarchArch == getArch() ||
2493-
(!BoundArch.empty() &&
2494-
XarchArch ==
2495-
tools::darwin::getArchTypeForMachOArchName(BoundArch))))
2490+
StringRef XarchArch = A->getValue(0);
2491+
if (!(XarchArch == getArchName() ||
2492+
(!BoundArch.empty() && XarchArch == BoundArch)))
24962493
continue;
24972494

24982495
Arg *OriginalArg = A;

clang/test/Driver/darwin-xarch.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,32 @@
1818
// RUN: FileCheck --check-prefix=CHECK-ARMV7-LINK < %t %s
1919
//
2020
// CHECK-ARMV7-LINK: ld{{.*}} "-arch" "armv7"{{.*}} "-some-linker-arg"
21+
22+
23+
// RUN: %clang -target armv7s-apple-ios7 -### \
24+
// RUN: -arch armv7 -Xarch_armv7 -DARMV7=1 \
25+
// RUN: -arch armv7s -Xarch_armv7s -DARMV7S=1 \
26+
// RUN: -c %s 2> %t
27+
// RUN: FileCheck --check-prefix=CHECK-ARMV7S < %t %s
28+
//
29+
// CHECK-ARMV7S: clang{{.*}}" "-cc1" "-triple" "thumbv7-apple-ios7.0.0"
30+
// CHECK-ARMV7S-NOT: "-D" "ARMV7S=1"
31+
// CHECK-ARMV7S-SAME: "-D" "ARMV7=1"
32+
//
33+
// CHECK-ARMV7S: clang{{.*}}" "-cc1" "-triple" "thumbv7s-apple-ios7.0.0"
34+
// CHECK-ARMV7S-NOT: "-D" "ARMV7=1"
35+
// CHECK-ARMV7S-SAME: "-D" "ARMV7S=1"
36+
37+
// RUN: %clang -target arm64-apple-ios14 -### \
38+
// RUN: -arch arm64 -Xarch_arm64 -DARM64=1 \
39+
// RUN: -arch arm64e -Xarch_arm64e -DARM64E=1 \
40+
// RUN: -c %s 2> %t
41+
// RUN: FileCheck --check-prefix=CHECK-ARM64 < %t %s
42+
//
43+
// CHECK-ARM64: clang{{.*}}" "-cc1" "-triple" "arm64-apple-ios14.0.0"
44+
// CHECK-ARM64-NOT: "-D" "ARM64E=1"
45+
// CHECK-ARM64-SAME: "-D" "ARM64=1"
46+
//
47+
// CHECK-ARM64: clang{{.*}}" "-cc1" "-triple" "arm64e-apple-ios14.0.0"
48+
// CHECK-ARM64-NOT: "-D" "ARM64=1"
49+
// CHECK-ARM64-SAME: "-D" "ARM64E=1"

0 commit comments

Comments
 (0)