summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2017-08-11 01:45:48 +0000
committerHans Wennborg <hans@hanshq.net>2017-08-11 01:45:48 +0000
commit13722d89229f5766535e66bdb82fd876f8ac1c2c (patch)
treecd5fa4d12cf4877939fc9ec093ddbcfe78aa5a0e
parentad0ce25f78a95689d1bbe14512f69badb22a43df (diff)
Merging r309633, r309636 and r309640:
------------------------------------------------------------------------ r309633 | ahatanak | 2017-07-31 15:19:34 -0700 (Mon, 31 Jul 2017) | 6 lines [Driver] Make sure the deployment target is earlier than iOS 11 when it is inferred from -isysroot. This fixes a change that was inadvertently introduced in r309607. rdar://problem/32230613 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r309636 | ahatanak | 2017-07-31 15:46:00 -0700 (Mon, 31 Jul 2017) | 1 line Silence warning -Wmissing-sysroot. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r309640 | ahatanak | 2017-07-31 16:08:52 -0700 (Mon, 31 Jul 2017) | 1 line Use -target instead of -arch in test case. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@310676 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Driver/ToolChains/Darwin.cpp46
-rw-r--r--test/Driver/darwin-version.c2
2 files changed, 25 insertions, 23 deletions
diff --git a/lib/Driver/ToolChains/Darwin.cpp b/lib/Driver/ToolChains/Darwin.cpp
index 3db84ee1e6..ad8e9eae79 100644
--- a/lib/Driver/ToolChains/Darwin.cpp
+++ b/lib/Driver/ToolChains/Darwin.cpp
@@ -1174,13 +1174,12 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
unsigned Major, Minor, Micro;
bool HadExtra;
- // iOS 10 is the maximum deployment target for 32-bit targets.
- if (iOSVersion && getTriple().isArch32Bit() &&
- Driver::GetReleaseVersion(iOSVersion->getValue(), Major, Minor, Micro,
- HadExtra) &&
- Major > 10)
- getDriver().Diag(diag::warn_invalid_ios_deployment_target)
- << iOSVersion->getAsString(Args);
+ // The iOS deployment target that is explicitly specified via a command line
+ // option or an environment variable.
+ std::string ExplicitIOSDeploymentTargetStr;
+
+ if (iOSVersion)
+ ExplicitIOSDeploymentTargetStr = iOSVersion->getAsString(Args);
// Add a macro to differentiate between m(iphone|tv|watch)os-version-min=X.Y and
// -m(iphone|tv|watch)simulator-version-min=X.Y.
@@ -1223,13 +1222,9 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
if (char *env = ::getenv("WATCHOS_DEPLOYMENT_TARGET"))
WatchOSTarget = env;
- // iOS 10 is the maximum deployment target for 32-bit targets.
- if (!iOSTarget.empty() && getTriple().isArch32Bit() &&
- Driver::GetReleaseVersion(iOSTarget.c_str(), Major, Minor, Micro,
- HadExtra) &&
- Major > 10)
- getDriver().Diag(diag::warn_invalid_ios_deployment_target)
- << std::string("IPHONEOS_DEPLOYMENT_TARGET=") + iOSTarget;
+ if (!iOSTarget.empty())
+ ExplicitIOSDeploymentTargetStr =
+ std::string("IPHONEOS_DEPLOYMENT_TARGET=") + iOSTarget;
// If there is no command-line argument to specify the Target version and
// no environment variable defined, see if we can set the default based
@@ -1298,15 +1293,6 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
break;
case llvm::Triple::IOS:
getTriple().getiOSVersion(Major, Minor, Micro);
-
- // iOS 10 is the maximum deployment target for 32-bit targets. If the
- // inferred deployment target is iOS 11 or later, set it to 10.99.
- if (getTriple().isArch32Bit() && Major >= 11) {
- Major = 10;
- Minor = 99;
- Micro = 99;
- }
-
OSTarget = &iOSTarget;
break;
case llvm::Triple::TvOS:
@@ -1402,6 +1388,20 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
HadExtra || Major >= 100 || Minor >= 100 || Micro >= 100)
getDriver().Diag(diag::err_drv_invalid_version_number)
<< iOSVersion->getAsString(Args);
+ // For 32-bit targets, the deployment target for iOS has to be earlier than
+ // iOS 11.
+ if (getTriple().isArch32Bit() && Major >= 11) {
+ // If the deployment target is explicitly specified, print a diagnostic.
+ if (!ExplicitIOSDeploymentTargetStr.empty()) {
+ getDriver().Diag(diag::warn_invalid_ios_deployment_target)
+ << ExplicitIOSDeploymentTargetStr;
+ // Otherwise, set it to 10.99.99.
+ } else {
+ Major = 10;
+ Minor = 99;
+ Micro = 99;
+ }
+ }
} else if (Platform == TvOS) {
if (!Driver::GetReleaseVersion(TvOSVersion->getValue(), Major, Minor,
Micro, HadExtra) || HadExtra ||
diff --git a/test/Driver/darwin-version.c b/test/Driver/darwin-version.c
index 785bd8ae98..3ff49aca6c 100644
--- a/test/Driver/darwin-version.c
+++ b/test/Driver/darwin-version.c
@@ -26,6 +26,8 @@
// RUN: %clang -target armv7-apple-ios11.1 -c -### %s 2>&1 | \
// RUN: FileCheck --check-prefix=CHECK-VERSION-IOS7 %s
+// RUN: %clang -target armv7-apple-ios9 -Wno-missing-sysroot -isysroot SDKs/iPhoneOS11.0.sdk -c -### %s 2>&1 | \
+// RUN: FileCheck --check-prefix=CHECK-VERSION-IOS7 %s
// CHECK-VERSION-IOS7: thumbv7-apple-ios10.99.99
// RUN: env IPHONEOS_DEPLOYMENT_TARGET=11.0 \