@@ -1523,12 +1523,29 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
1523
1523
Optional<DarwinPlatform> OSTarget =
1524
1524
getDeploymentTargetFromTargetArg (Args, getTriple (), getDriver ());
1525
1525
if (OSTarget) {
1526
- // Warn about superfluous -m<os>-version-min arg.
1527
1526
Optional<DarwinPlatform> OSVersionArgTarget =
1528
1527
getDeploymentTargetFromOSVersionArg (Args, getDriver ());
1529
- if (OSVersionArgTarget)
1530
- getDriver ().Diag (clang::diag::warn_drv_unused_argument)
1531
- << OSVersionArgTarget->getAsString (Args, Opts);
1528
+ if (OSVersionArgTarget) {
1529
+ unsigned TargetMajor, TargetMinor, TargetMicro;
1530
+ bool TargetExtra;
1531
+ unsigned ArgMajor, ArgMinor, ArgMicro;
1532
+ bool ArgExtra;
1533
+ if (OSTarget->getPlatform () != OSVersionArgTarget->getPlatform () ||
1534
+ (Driver::GetReleaseVersion (OSTarget->getOSVersion (), TargetMajor,
1535
+ TargetMinor, TargetMicro, TargetExtra) &&
1536
+ Driver::GetReleaseVersion (OSVersionArgTarget->getOSVersion (),
1537
+ ArgMajor, ArgMinor, ArgMicro, ArgExtra) &&
1538
+ (VersionTuple (TargetMajor, TargetMinor, TargetMicro) !=
1539
+ VersionTuple (ArgMajor, ArgMinor, ArgMicro) ||
1540
+ TargetExtra != ArgExtra))) {
1541
+ // Warn about -m<os>-version-min that doesn't match the OS version
1542
+ // that's specified in the target.
1543
+ std::string OSVersionArg = OSVersionArgTarget->getAsString (Args, Opts);
1544
+ std::string TargetArg = OSTarget->getAsString (Args, Opts);
1545
+ getDriver ().Diag (clang::diag::warn_drv_overriding_flag_option)
1546
+ << OSVersionArg << TargetArg;
1547
+ }
1548
+ }
1532
1549
} else {
1533
1550
// The OS target can be specified using the -m<os>version-min argument.
1534
1551
OSTarget = getDeploymentTargetFromOSVersionArg (Args, getDriver ());
0 commit comments