summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2011-04-21 21:27:33 +0000
committerDaniel Dunbar <daniel@zuster.org>2011-04-21 21:27:33 +0000
commitbbd482226e2b5929342ae17211ddd83e015ac10e (patch)
tree94e3884f24ae2e973b6dfa60d3d13401391a6520
parent2266aa84a1658553fad54e0d33ca1df32e0fa05f (diff)
downloadbcm5719-llvm-bbd482226e2b5929342ae17211ddd83e015ac10e.tar.gz
bcm5719-llvm-bbd482226e2b5929342ae17211ddd83e015ac10e.zip
Driver/Darwin: Allow OS X deployment targets like 10.4.11, even though they
can't be represented in the environment define. llvm-svn: 129939
-rw-r--r--clang/lib/Basic/Targets.cpp12
-rw-r--r--clang/lib/Driver/ToolChains.cpp2
-rw-r--r--clang/test/Driver/darwin-version.c8
3 files changed, 17 insertions, 5 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index fd7168d16cc..d06ff48be4b 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -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);
}
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index c5d34daf2f3..f3c32f7970c 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -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 {
diff --git a/clang/test/Driver/darwin-version.c b/clang/test/Driver/darwin-version.c
index 84533a62524..d9c5c5ed3f7 100644
--- a/clang/test/Driver/darwin-version.c
+++ b/clang/test/Driver/darwin-version.c
@@ -21,3 +21,11 @@
#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
OpenPOWER on IntegriCloud