Skip to content

Commit 2a67014

Browse files
committed
[clang][driver][darwin] Enforce consistent major version limit for any Darwin OS
Limit can also be bumped up to 999 to allow OS versions over 100
1 parent 624e9e1 commit 2a67014

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,17 +2187,20 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
21872187

21882188
unsigned Major, Minor, Micro;
21892189
bool HadExtra;
2190+
// The major version should not be over this number.
2191+
const unsigned MajorVersionLimit = 1000;
21902192
// Set the tool chain target information.
21912193
if (Platform == MacOS) {
21922194
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
21932195
Micro, HadExtra) ||
2194-
HadExtra || Major < 10 || Major >= 100 || Minor >= 100 || Micro >= 100)
2196+
HadExtra || Major < 10 || Major >= MajorVersionLimit || Minor >= 100 ||
2197+
Micro >= 100)
21952198
getDriver().Diag(diag::err_drv_invalid_version_number)
21962199
<< OSTarget->getAsString(Args, Opts);
21972200
} else if (Platform == IPhoneOS) {
21982201
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
21992202
Micro, HadExtra) ||
2200-
HadExtra || Major >= 100 || Minor >= 100 || Micro >= 100)
2203+
HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)
22012204
getDriver().Diag(diag::err_drv_invalid_version_number)
22022205
<< OSTarget->getAsString(Args, Opts);
22032206
;
@@ -2229,19 +2232,20 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
22292232
} else if (Platform == TvOS) {
22302233
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
22312234
Micro, HadExtra) ||
2232-
HadExtra || Major >= 100 || Minor >= 100 || Micro >= 100)
2235+
HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)
22332236
getDriver().Diag(diag::err_drv_invalid_version_number)
22342237
<< OSTarget->getAsString(Args, Opts);
22352238
} else if (Platform == WatchOS) {
22362239
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
22372240
Micro, HadExtra) ||
2238-
HadExtra || Major >= 10 || Minor >= 100 || Micro >= 100)
2241+
HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)
22392242
getDriver().Diag(diag::err_drv_invalid_version_number)
22402243
<< OSTarget->getAsString(Args, Opts);
22412244
} else if (Platform == DriverKit) {
22422245
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
22432246
Micro, HadExtra) ||
2244-
HadExtra || Major < 19 || Major >= 100 || Minor >= 100 || Micro >= 100)
2247+
HadExtra || Major < 19 || Major >= MajorVersionLimit || Minor >= 100 ||
2248+
Micro >= 100)
22452249
getDriver().Diag(diag::err_drv_invalid_version_number)
22462250
<< OSTarget->getAsString(Args, Opts);
22472251
} else

clang/test/Driver/darwin-version.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,18 @@
332332
// RUN: FileCheck --check-prefix=CHECK-MACOS11 %s
333333

334334
// CHECK-MACOS11: "x86_64-apple-macosx11.0.0"
335+
336+
// RUN: %clang -target arm64-apple-macos999 -c %s -### 2>&1 | \
337+
// RUN: FileCheck --check-prefix=CHECK-MACOS999 %s
338+
339+
// CHECK-MACOS999: "arm64-apple-macosx999.0.0"
340+
341+
// RUN: %clang -target arm64-apple-watchos99 -c %s -### 2>&1 | \
342+
// RUN: FileCheck --check-prefix=CHECK-WATCHOS99 %s
343+
344+
// CHECK-WATCHOS99: "arm64-apple-watchos99.0.0"
345+
346+
// RUN: not %clang -target arm64-apple-ios999999 -c %s 2>&1 | \
347+
// RUN: FileCheck --check-prefix=CHECK-IOS999999 %s
348+
349+
// CHECK-IOS999999: error: invalid version number in '-target arm64-apple-ios999999'

0 commit comments

Comments
 (0)