Index: lib/Driver/ToolChains/Darwin.cpp =================================================================== --- lib/Driver/ToolChains/Darwin.cpp +++ lib/Driver/ToolChains/Darwin.cpp @@ -1512,9 +1512,18 @@ else if (MachOArchName == "armv7k") OSTy = llvm::Triple::WatchOS; else if (MachOArchName != "armv6m" && MachOArchName != "armv7m" && - MachOArchName != "armv7em") + MachOArchName != "armv7em") { + // Default to macOS for other architectures. OSTy = llvm::Triple::MacOSX; + // If there is no version specified on triple, and both host and target are + // macos, use the host triple to infer OS version. + llvm::Triple SystemTriple(llvm::sys::getProcessTriple()); + if (SystemTriple.isMacOSX() && !Triple.getOSMajorVersion()) + return DarwinPlatform::createFromArch( + OSTy, getOSVersion(OSTy, SystemTriple, TheDriver)); + } + if (OSTy == llvm::Triple::UnknownOS) return None; return DarwinPlatform::createFromArch(OSTy, @@ -1529,7 +1538,17 @@ if (Triple.getOS() == llvm::Triple::Darwin || Triple.getOS() == llvm::Triple::UnknownOS) return None; - std::string OSVersion = getOSVersion(Triple.getOS(), Triple, TheDriver); + + // If the host and target are both macos, and the OS version is not set in + // the target, infer the os version from host triple. + std::string OSVersion; + llvm::Triple SystemTriple(llvm::sys::getProcessTriple()); + if (Triple.isMacOSX() && SystemTriple.isMacOSX() && + !Triple.getOSMajorVersion()) + OSVersion = getOSVersion(SystemTriple.getOS(), SystemTriple, TheDriver); + else + OSVersion = getOSVersion(Triple.getOS(), Triple, TheDriver); + return DarwinPlatform::createFromTarget(Triple, OSVersion, Args.getLastArg(options::OPT_target)); } Index: test/Driver/clang-g-opts.c =================================================================== --- test/Driver/clang-g-opts.c +++ test/Driver/clang-g-opts.c @@ -3,7 +3,7 @@ // RUN: | FileCheck --check-prefix=CHECK-WITH-G %s // Assert that the toolchains which should default to a lower Dwarf version do so. -// RUN: %clang -### -S %s -g -target x86_64-apple-darwin 2>&1 \ +// RUN: %clang -### -S %s -g -target x86_64-apple-darwin8 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s // RUN: %clang -### -S %s -g -target i686-pc-openbsd 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s @@ -21,7 +21,7 @@ // // RUN: %clang -### -S %s -g0 -g -target x86_64-linux-gnu 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G %s -// RUN: %clang -### -S %s -g0 -g -target x86_64-apple-darwin 2>&1 \ +// RUN: %clang -### -S %s -g0 -g -target x86_64-apple-darwin8 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G-STANDALONE %s // RUN: %clang -### -S %s -g0 -g -target i686-pc-openbsd 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s Index: test/Driver/target-triple-deployment.c =================================================================== --- test/Driver/target-triple-deployment.c +++ test/Driver/target-triple-deployment.c @@ -1,5 +1,5 @@ // RUN: touch %t.o -// RUN: %clang -target x86_64-apple-macosx -### %t.o 2> %t.log +// RUN: %clang -target x86_64-apple-macosx10.4 -### %t.o 2> %t.log // RUN: %clang -target x86_64-apple-darwin9 -### %t.o 2>> %t.log // RUN: %clang -target x86_64-apple-macosx10.7 -### %t.o 2>> %t.log //