diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-12-20 02:31:30 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-12-20 02:31:30 +0000 |
commit | fdd60aee9c0ea40fa0423d6e43821f53d07961d5 (patch) | |
tree | 6ad35136dffcf3713cb028d4574fee6020a3eb61 /lib/Driver/ToolChains/Darwin.cpp | |
parent | 563a9c52b688652b4bbc2e7d494296961a88e897 (diff) |
[darwin][driver] Warn about mismatching -<os>-version-min rather than
superfluous -<os>-version-min compiler option
rdar://35813850
Differential Revision: https://reviews.llvm.org/D41425
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@321145 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/ToolChains/Darwin.cpp')
-rw-r--r-- | lib/Driver/ToolChains/Darwin.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/Driver/ToolChains/Darwin.cpp b/lib/Driver/ToolChains/Darwin.cpp index 3d53a1711f..289f4ed92f 100644 --- a/lib/Driver/ToolChains/Darwin.cpp +++ b/lib/Driver/ToolChains/Darwin.cpp @@ -1523,12 +1523,29 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { Optional<DarwinPlatform> OSTarget = getDeploymentTargetFromTargetArg(Args, getTriple(), getDriver()); if (OSTarget) { - // Warn about superfluous -m<os>-version-min arg. Optional<DarwinPlatform> OSVersionArgTarget = getDeploymentTargetFromOSVersionArg(Args, getDriver()); - if (OSVersionArgTarget) - getDriver().Diag(clang::diag::warn_drv_unused_argument) - << OSVersionArgTarget->getAsString(Args, Opts); + if (OSVersionArgTarget) { + unsigned TargetMajor, TargetMinor, TargetMicro; + bool TargetExtra; + unsigned ArgMajor, ArgMinor, ArgMicro; + bool ArgExtra; + if (OSTarget->getPlatform() != OSVersionArgTarget->getPlatform() || + (Driver::GetReleaseVersion(OSTarget->getOSVersion(), TargetMajor, + TargetMinor, TargetMicro, TargetExtra) && + Driver::GetReleaseVersion(OSVersionArgTarget->getOSVersion(), + ArgMajor, ArgMinor, ArgMicro, ArgExtra) && + (VersionTuple(TargetMajor, TargetMinor, TargetMicro) != + VersionTuple(ArgMajor, ArgMinor, ArgMicro) || + TargetExtra != ArgExtra))) { + // Warn about -m<os>-version-min that doesn't match the OS version + // that's specified in the target. + std::string OSVersionArg = OSVersionArgTarget->getAsString(Args, Opts); + std::string TargetArg = OSTarget->getAsString(Args, Opts); + getDriver().Diag(clang::diag::warn_drv_overriding_flag_option) + << OSVersionArg << TargetArg; + } + } } else { // The OS target can be specified using the -m<os>version-min argument. OSTarget = getDeploymentTargetFromOSVersionArg(Args, getDriver()); |