diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index ccdaa5c7eb68b..f7d28ab46b680 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -546,14 +546,15 @@ static llvm::Triple computeTargetTriple(const Driver &D, if (Target.isOSBinFormatMachO()) { // If an explicit Darwin arch name is given, that trumps all. if (!DarwinArchName.empty()) { - tools::darwin::setTripleTypeForMachOArchName(Target, DarwinArchName); + tools::darwin::setTripleTypeForMachOArchName(Target, DarwinArchName, + Args); return Target; } // Handle the Darwin '-arch' flag. if (Arg *A = Args.getLastArg(options::OPT_arch)) { StringRef ArchName = A->getValue(); - tools::darwin::setTripleTypeForMachOArchName(Target, ArchName); + tools::darwin::setTripleTypeForMachOArchName(Target, ArchName, Args); } } diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 200a43df739a8..0f9474c45822f 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -74,7 +74,8 @@ llvm::Triple::ArchType darwin::getArchTypeForMachOArchName(StringRef Str) { .Default(llvm::Triple::UnknownArch); } -void darwin::setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str) { +void darwin::setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str, + const ArgList &Args) { const llvm::Triple::ArchType Arch = getArchTypeForMachOArchName(Str); llvm::ARM::ArchKind ArchKind = llvm::ARM::parseArch(Str); T.setArch(Arch); @@ -84,6 +85,11 @@ void darwin::setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str) { if (ArchKind == llvm::ARM::ArchKind::ARMV6M || ArchKind == llvm::ARM::ArchKind::ARMV7M || ArchKind == llvm::ARM::ArchKind::ARMV7EM) { + // Don't reject -mios-version-min= if we have an iOS triple. + if (T.isiOS()) + if (Arg *A = Args.getLastArgNoClaim(options::OPT_mios_version_min_EQ)) + A->ignoreTargetSpecific(); + T.setOS(llvm::Triple::UnknownOS); T.setObjectFormat(llvm::Triple::MachO); } diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index 42b72e53be125..815449ae8f379 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -28,7 +28,8 @@ namespace tools { namespace darwin { llvm::Triple::ArchType getArchTypeForMachOArchName(StringRef Str); -void setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str); +void setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str, + const llvm::opt::ArgList &Args); class LLVM_LIBRARY_VISIBILITY MachOTool : public Tool { virtual void anchor(); diff --git a/clang/test/Driver/macho-embedded.c b/clang/test/Driver/macho-embedded.c index cde157d8b4d4b..6b93b967e2544 100644 --- a/clang/test/Driver/macho-embedded.c +++ b/clang/test/Driver/macho-embedded.c @@ -6,10 +6,13 @@ // RUN: %clang -arch armv7m -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-MACHO-EMBEDDED // RUN: %clang -arch armv7em -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-MACHO-EMBEDDED +// RUN: %clang -arch armv7m --target=thumbv7-apple-ios -mios-version-min=5 -fdriver-only -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-MACHO-EMBEDDED-DIAG + // CHECK-IOS: "-triple" "thumbv7" "thumbv7-apple-ios // CHECK-AAPCS: "-target-abi" "aapcs" // CHECK-APCS: "-target-abi" "apcs-gnu" +// CHECK-MACHO-EMBEDDED-DIAG: warning: argument unused during compilation: '-mios-version-min=5' // CHECK-MACHO-EMBEDDED: "-triple" "{{thumbv[67]e?m}}-apple-unknown-macho" // CHECK-MACHO-EMBEDDED: "-mrelocation-model" "pic"