diff options
-rw-r--r-- | lib/Driver/ToolChains.cpp | 47 | ||||
-rw-r--r-- | test/Driver/darwin-ld.c | 8 | ||||
-rw-r--r-- | test/Driver/rewrite-objc.m | 2 |
3 files changed, 46 insertions, 11 deletions
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index b4273f8c2e..9cc29cd545 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -50,17 +50,44 @@ Darwin::Darwin(const Driver &D, const llvm::Triple& Triple) ARCRuntimeForSimulator(ARCSimulator_None), LibCXXForSimulator(LibCXXSimulator_None) { - // Compute the initial Darwin version based on the host. - bool HadExtra; - std::string OSName = Triple.getOSName(); - if (!Driver::GetReleaseVersion(&OSName.c_str()[6], - DarwinVersion[0], DarwinVersion[1], - DarwinVersion[2], HadExtra)) - getDriver().Diag(diag::err_drv_invalid_darwin_version) << OSName; - + // Compute the initial Darwin version from the triple + unsigned Major, Minor, Micro; + Triple.getOSVersion(Major, Minor, Micro); + switch (Triple.getOS()) { + default: assert(0 && "unexpected OS for Darwin triple"); + case llvm::Triple::Darwin: + // Default to darwin4, i.e., MacOSX 10.0.0. + if (Major == 0) + Major = 4; + if (Major < 4) + getDriver().Diag(diag::err_drv_invalid_darwin_version) << + Triple.getOSName(); + Micro = 0; + Minor = Major - 4; + Major = 10; + break; + case llvm::Triple::MacOSX: + // Default to MacOSX 10. + if (Major == 0) + Major = 10; + if (Major != 10) + getDriver().Diag(diag::err_drv_invalid_darwin_version) << + Triple.getOSName(); + break; + case llvm::Triple::IOS: + // Ignore the version from the triple. + Major = 10; + Minor = 0; + Micro = 0; + break; + } + // FIXME: DarwinVersion is only used to find GCC's libexec directory. + // It should be removed when we stop supporting that. + DarwinVersion[0] = Minor + 4; + DarwinVersion[1] = Micro; + DarwinVersion[2] = 0; llvm::raw_string_ostream(MacosxVersionMin) - << "10." << std::max(0, (int)DarwinVersion[0] - 4) << '.' - << DarwinVersion[1]; + << Major << '.' << Minor << '.' << Micro; } types::ID Darwin::LookupTypeForExtension(const char *Ext) const { diff --git a/test/Driver/darwin-ld.c b/test/Driver/darwin-ld.c index da8f4e0e6b..056d34706a 100644 --- a/test/Driver/darwin-ld.c +++ b/test/Driver/darwin-ld.c @@ -109,3 +109,11 @@ // RUN: FileCheck -check-prefix=LINK_LAZY_LIBRARY %s < %t.log // LINK_LAZY_LIBRARY: {{ld(.exe)?"}} // LINK_LAZY_LIBRARY: "-lazy_library" "Library" + +// RUN: %clang -target x86_64-apple-darwin10 -### %t.o 2> %t.log +// RUN: %clang -target x86_64-apple-macosx10.7 -### %t.o 2>> %t.log +// RUN: FileCheck -check-prefix=LINK_VERSION_MIN %s < %t.log +// LINK_VERSION_MIN: {{ld(.exe)?"}} +// LINK_VERSION_MIN: "-macosx_version_min" "10.6.0" +// LINK_VERSION_MIN: {{ld(.exe)?"}} +// LINK_VERSION_MIN: "-macosx_version_min" "10.7.0" diff --git a/test/Driver/rewrite-objc.m b/test/Driver/rewrite-objc.m index c1336acad6..9e779f76b1 100644 --- a/test/Driver/rewrite-objc.m +++ b/test/Driver/rewrite-objc.m @@ -3,7 +3,7 @@ // TEST0: clang{{.*}}" "-cc1" // TEST0: "-rewrite-objc" // FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead. -// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-fragile-abi" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fdiagnostics-show-option" +// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime-has-arc" "-fobjc-runtime-has-weak" "-fobjc-fragile-abi" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fdiagnostics-show-option" // TEST0: rewrite-objc.m" // RUN: not %clang -ccc-no-clang -target unknown -rewrite-objc %s -o - -### 2>&1 | \ |