diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index fd7168d16ccf..d06ff48be4b9 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 c5d34daf2f32..f3c32f7970c8 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 84533a625246..d9c5c5ed3f7b 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