]> granicus.if.org Git - clang/commitdiff
Driver/Darwin: Allow OS X deployment targets like 10.4.11, even though they
authorDaniel Dunbar <daniel@zuster.org>
Thu, 21 Apr 2011 21:27:33 +0000 (21:27 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 21 Apr 2011 21:27:33 +0000 (21:27 +0000)
can't be represented in the environment define.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129939 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
lib/Driver/ToolChains.cpp
test/Driver/darwin-version.c

index fd7168d16ccf0101cba298027e7f0b2b9ba6b62b..d06ff48be4b9b4cfcaa78222bb5e0efa06ba5598 100644 (file)
@@ -135,7 +135,7 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
 
   // Set the appropriate OS version define.
   if (PlatformName == "ios") {
-    assert(Maj < 10 && Min < 99 && Rev < 99 && "Invalid version!");
+    assert(Maj < 10 && Min < 100 && Rev < 100 && "Invalid version!");
     char Str[6];
     Str[0] = '0' + Maj;
     Str[1] = '0' + (Min / 10);
@@ -145,13 +145,17 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
     Str[5] = '\0';
     Builder.defineMacro("__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__", Str);
   } else {
+    // Note that the Driver allows versions which aren't representable in the
+    // define (because we only get a single digit for the minor and micro
+    // revision numbers). So, we limit them to the maximum representable
+    // version.
     assert(Triple.getEnvironmentName().empty() && "Invalid environment!");
-    assert(Maj < 99 && Min < 10 && Rev < 10 && "Invalid version!");
+    assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!");
     char Str[5];
     Str[0] = '0' + (Maj / 10);
     Str[1] = '0' + (Maj % 10);
-    Str[2] = '0' + Min;
-    Str[3] = '0' + Rev;
+    Str[2] = '0' + std::min(Min, 9U);
+    Str[3] = '0' + std::min(Rev, 9U);
     Str[4] = '\0';
     Builder.defineMacro("__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__", Str);
   }
index c5d34daf2f3206bcb97e01ba34b5aab57d03c3bc..f3c32f7970c809ccb1c7b57215f2b82f0315a9b3 100644 (file)
@@ -441,7 +441,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
     assert(!iPhoneVersion && "Unknown target platform!");
     if (!Driver::GetReleaseVersion(OSXVersion->getValue(Args), Major, Minor,
                                    Micro, HadExtra) || HadExtra ||
-        Major != 10 || Minor >= 10 || Micro >= 10)
+        Major != 10 || Minor >= 100 || Micro >= 100)
       getDriver().Diag(clang::diag::err_drv_invalid_version_number)
         << OSXVersion->getAsString(Args);
   } else {
index 84533a62524652fbf0033cdd9ed77c6f5c8ba960..d9c5c5ed3f7bb87e14d2b426d5a2a9c785bc09ef 100644 (file)
 #error Invalid version
 #endif
 #endif
+
+// RUN: env MACOSX_DEPLOYMENT_TARGET=10.4.10 \
+// RUN:   %clang -ccc-host-triple i386-apple-darwin9 -DTEST3 -E %s
+#ifdef TEST3
+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1049
+#error Invalid version
+#endif
+#endif