Skip to content

Commit 63a6348

Browse files
committed
Revert "Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible."
This reverts commit 5032467.
1 parent 4cb7929 commit 63a6348

24 files changed

+415
-326
lines changed

clang/lib/ARCMigrate/ARCMT.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ static bool HasARCRuntime(CompilerInvocation &origCI) {
162162
return triple.getOSMajorVersion() >= 11;
163163

164164
if (triple.getOS() == llvm::Triple::MacOSX) {
165-
return triple.getOSVersion() >= VersionTuple(10, 7);
165+
unsigned Major, Minor, Micro;
166+
triple.getOSVersion(Major, Minor, Micro);
167+
return Major > 10 || (Major == 10 && Minor >= 7);
166168
}
167169

168170
return false;

clang/lib/Basic/Targets/OSTargets.cpp

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
4848
Builder.defineMacro("_REENTRANT");
4949

5050
// Get the platform type and version number from the triple.
51-
VersionTuple OsVersion;
51+
unsigned Maj, Min, Rev;
5252
if (Triple.isMacOSX()) {
53-
Triple.getMacOSXVersion(OsVersion);
53+
Triple.getMacOSXVersion(Maj, Min, Rev);
5454
PlatformName = "macos";
5555
} else {
56-
OsVersion = Triple.getOSVersion();
56+
Triple.getOSVersion(Maj, Min, Rev);
5757
PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
5858
if (PlatformName == "ios" && Triple.isMacCatalystEnvironment())
5959
PlatformName = "maccatalyst";
@@ -63,29 +63,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
6363
// generating code for Win32 ABI. No need to emit
6464
// __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__.
6565
if (PlatformName == "win32") {
66-
PlatformMinVersion = OsVersion;
66+
PlatformMinVersion = VersionTuple(Maj, Min, Rev);
6767
return;
6868
}
6969

7070
// Set the appropriate OS version define.
7171
if (Triple.isiOS()) {
72-
assert(OsVersion < VersionTuple(100) && "Invalid version!");
72+
assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!");
7373
char Str[7];
74-
if (OsVersion.getMajor() < 10) {
75-
Str[0] = '0' + OsVersion.getMajor();
76-
Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
77-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
78-
Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
79-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
74+
if (Maj < 10) {
75+
Str[0] = '0' + Maj;
76+
Str[1] = '0' + (Min / 10);
77+
Str[2] = '0' + (Min % 10);
78+
Str[3] = '0' + (Rev / 10);
79+
Str[4] = '0' + (Rev % 10);
8080
Str[5] = '\0';
8181
} else {
8282
// Handle versions >= 10.
83-
Str[0] = '0' + (OsVersion.getMajor() / 10);
84-
Str[1] = '0' + (OsVersion.getMajor() % 10);
85-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
86-
Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
87-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
88-
Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
83+
Str[0] = '0' + (Maj / 10);
84+
Str[1] = '0' + (Maj % 10);
85+
Str[2] = '0' + (Min / 10);
86+
Str[3] = '0' + (Min % 10);
87+
Str[4] = '0' + (Rev / 10);
88+
Str[5] = '0' + (Rev % 10);
8989
Str[6] = '\0';
9090
}
9191
if (Triple.isTvOS())
@@ -95,36 +95,36 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
9595
Str);
9696

9797
} else if (Triple.isWatchOS()) {
98-
assert(OsVersion < VersionTuple(10) && "Invalid version!");
98+
assert(Maj < 10 && Min < 100 && Rev < 100 && "Invalid version!");
9999
char Str[6];
100-
Str[0] = '0' + OsVersion.getMajor();
101-
Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
102-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
103-
Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
104-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
100+
Str[0] = '0' + Maj;
101+
Str[1] = '0' + (Min / 10);
102+
Str[2] = '0' + (Min % 10);
103+
Str[3] = '0' + (Rev / 10);
104+
Str[4] = '0' + (Rev % 10);
105105
Str[5] = '\0';
106106
Builder.defineMacro("__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__", Str);
107107
} else if (Triple.isMacOSX()) {
108108
// Note that the Driver allows versions which aren't representable in the
109109
// define (because we only get a single digit for the minor and micro
110110
// revision numbers). So, we limit them to the maximum representable
111111
// version.
112-
assert(OsVersion < VersionTuple(100) && "Invalid version!");
112+
assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!");
113113
char Str[7];
114-
if (OsVersion < VersionTuple(10, 10)) {
115-
Str[0] = '0' + (OsVersion.getMajor() / 10);
116-
Str[1] = '0' + (OsVersion.getMajor() % 10);
117-
Str[2] = '0' + std::min(OsVersion.getMinor().getValueOr(0), 9U);
118-
Str[3] = '0' + std::min(OsVersion.getSubminor().getValueOr(0), 9U);
114+
if (Maj < 10 || (Maj == 10 && Min < 10)) {
115+
Str[0] = '0' + (Maj / 10);
116+
Str[1] = '0' + (Maj % 10);
117+
Str[2] = '0' + std::min(Min, 9U);
118+
Str[3] = '0' + std::min(Rev, 9U);
119119
Str[4] = '\0';
120120
} else {
121121
// Handle versions > 10.9.
122-
Str[0] = '0' + (OsVersion.getMajor() / 10);
123-
Str[1] = '0' + (OsVersion.getMajor() % 10);
124-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
125-
Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
126-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
127-
Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
122+
Str[0] = '0' + (Maj / 10);
123+
Str[1] = '0' + (Maj % 10);
124+
Str[2] = '0' + (Min / 10);
125+
Str[3] = '0' + (Min % 10);
126+
Str[4] = '0' + (Rev / 10);
127+
Str[5] = '0' + (Rev % 10);
128128
Str[6] = '\0';
129129
}
130130
Builder.defineMacro("__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__", Str);
@@ -134,7 +134,7 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
134134
if (Triple.isOSDarwin())
135135
Builder.defineMacro("__MACH__");
136136

137-
PlatformMinVersion = OsVersion;
137+
PlatformMinVersion = VersionTuple(Maj, Min, Rev);
138138
}
139139

140140
static void addMinGWDefines(const llvm::Triple &Triple, const LangOptions &Opts,

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> {
148148
return 64;
149149
}
150150

151-
if (T.getOSVersion() < MinVersion)
151+
unsigned Major, Minor, Micro;
152+
T.getOSVersion(Major, Minor, Micro);
153+
if (llvm::VersionTuple(Major, Minor, Micro) < MinVersion)
152154
return 64;
153155
return OSTargetInfo<Target>::getExnObjectAlignment();
154156
}
@@ -292,7 +294,7 @@ class LLVM_LIBRARY_VISIBILITY HaikuTargetInfo : public OSTargetInfo<Target> {
292294
Builder.defineMacro("__HAIKU__");
293295
Builder.defineMacro("__ELF__");
294296
DefineStd(Builder, "unix", Opts);
295-
if (this->HasFloat128)
297+
if (this->HasFloat128)
296298
Builder.defineMacro("__FLOAT128__");
297299
}
298300

@@ -374,9 +376,10 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
374376
Builder.defineMacro("__ELF__");
375377
if (Triple.isAndroid()) {
376378
Builder.defineMacro("__ANDROID__", "1");
379+
unsigned Maj, Min, Rev;
380+
Triple.getEnvironmentVersion(Maj, Min, Rev);
377381
this->PlatformName = "android";
378-
this->PlatformMinVersion = Triple.getEnvironmentVersion();
379-
const unsigned Maj = this->PlatformMinVersion.getMajor();
382+
this->PlatformMinVersion = VersionTuple(Maj, Min, Rev);
380383
if (Maj) {
381384
Builder.defineMacro("__ANDROID_MIN_SDK_VERSION__", Twine(Maj));
382385
// This historical but ambiguous name for the minSdkVersion macro. Keep
@@ -690,32 +693,23 @@ class AIXTargetInfo : public OSTargetInfo<Target> {
690693
if (Opts.EnableAIXExtendedAltivecABI)
691694
Builder.defineMacro("__EXTABI__");
692695

693-
VersionTuple OsVersion = Triple.getOSVersion();
696+
unsigned Major, Minor, Micro;
697+
Triple.getOSVersion(Major, Minor, Micro);
694698

695699
// Define AIX OS-Version Macros.
696700
// Includes logic for legacy versions of AIX; no specific intent to support.
697-
if (OsVersion >= VersionTuple(3, 2))
698-
Builder.defineMacro("_AIX32");
699-
if (OsVersion >= VersionTuple(4, 1))
700-
Builder.defineMacro("_AIX41");
701-
if (OsVersion >= VersionTuple(4, 3))
702-
Builder.defineMacro("_AIX43");
703-
if (OsVersion >= VersionTuple(5, 0))
704-
Builder.defineMacro("_AIX50");
705-
if (OsVersion >= VersionTuple(5, 1))
706-
Builder.defineMacro("_AIX51");
707-
if (OsVersion >= VersionTuple(5, 2))
708-
Builder.defineMacro("_AIX52");
709-
if (OsVersion >= VersionTuple(5, 3))
710-
Builder.defineMacro("_AIX53");
711-
if (OsVersion >= VersionTuple(6, 1))
712-
Builder.defineMacro("_AIX61");
713-
if (OsVersion >= VersionTuple(7, 1))
714-
Builder.defineMacro("_AIX71");
715-
if (OsVersion >= VersionTuple(7, 2))
716-
Builder.defineMacro("_AIX72");
717-
if (OsVersion >= VersionTuple(7, 3))
718-
Builder.defineMacro("_AIX73");
701+
std::pair<int, int> OsVersion = {Major, Minor};
702+
if (OsVersion >= std::make_pair(3, 2)) Builder.defineMacro("_AIX32");
703+
if (OsVersion >= std::make_pair(4, 1)) Builder.defineMacro("_AIX41");
704+
if (OsVersion >= std::make_pair(4, 3)) Builder.defineMacro("_AIX43");
705+
if (OsVersion >= std::make_pair(5, 0)) Builder.defineMacro("_AIX50");
706+
if (OsVersion >= std::make_pair(5, 1)) Builder.defineMacro("_AIX51");
707+
if (OsVersion >= std::make_pair(5, 2)) Builder.defineMacro("_AIX52");
708+
if (OsVersion >= std::make_pair(5, 3)) Builder.defineMacro("_AIX53");
709+
if (OsVersion >= std::make_pair(6, 1)) Builder.defineMacro("_AIX61");
710+
if (OsVersion >= std::make_pair(7, 1)) Builder.defineMacro("_AIX71");
711+
if (OsVersion >= std::make_pair(7, 2)) Builder.defineMacro("_AIX72");
712+
if (OsVersion >= std::make_pair(7, 3)) Builder.defineMacro("_AIX73");
719713

720714
// FIXME: Do not define _LONG_LONG when -fno-long-long is specified.
721715
Builder.defineMacro("_LONG_LONG");

clang/lib/Basic/Targets/X86.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,10 @@ class LLVM_LIBRARY_VISIBILITY NetBSDI386TargetInfo
472472
: NetBSDTargetInfo<X86_32TargetInfo>(Triple, Opts) {}
473473

474474
unsigned getFloatEvalMethod() const override {
475-
VersionTuple OsVersion = getTriple().getOSVersion();
475+
unsigned Major, Minor, Micro;
476+
getTriple().getOSVersion(Major, Minor, Micro);
476477
// New NetBSD uses the default rounding mode.
477-
if (OsVersion >= VersionTuple(6, 99, 26) || OsVersion.getMajor() == 0)
478+
if (Major >= 7 || (Major == 6 && Minor == 99 && Micro >= 26) || Major == 0)
478479
return X86_32TargetInfo::getFloatEvalMethod();
479480
// NetBSD before 6.99.26 defaults to "double" rounding.
480481
return 1;

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,8 +1410,8 @@ static std::string getSystemOrSDKMacOSVersion(StringRef MacOSSDKVersion) {
14101410
llvm::Triple SystemTriple(llvm::sys::getProcessTriple());
14111411
if (!SystemTriple.isMacOSX())
14121412
return std::string(MacOSSDKVersion);
1413-
VersionTuple SystemVersion;
1414-
SystemTriple.getMacOSXVersion(SystemVersion);
1413+
SystemTriple.getMacOSXVersion(Major, Minor, Micro);
1414+
VersionTuple SystemVersion(Major, Minor, Micro);
14151415
bool HadExtra;
14161416
if (!Driver::GetReleaseVersion(MacOSSDKVersion, Major, Minor, Micro,
14171417
HadExtra))
@@ -1552,10 +1552,12 @@ struct DarwinPlatform {
15521552
const Optional<DarwinSDKInfo> &SDKInfo) {
15531553
DarwinPlatform Result(TargetArg, getPlatformFromOS(TT.getOS()), OSVersion,
15541554
A);
1555-
VersionTuple OsVersion = TT.getOSVersion();
1556-
if (OsVersion.getMajor() == 0)
1555+
unsigned Major, Minor, Micro;
1556+
TT.getOSVersion(Major, Minor, Micro);
1557+
if (Major == 0)
15571558
Result.HasOSVersion = false;
1558-
Result.setEnvironment(TT.getEnvironment(), OsVersion, SDKInfo);
1559+
Result.setEnvironment(TT.getEnvironment(),
1560+
VersionTuple(Major, Minor, Micro), SDKInfo);
15591561
return Result;
15601562
}
15611563
static DarwinPlatform
@@ -1801,7 +1803,7 @@ inferDeploymentTargetFromSDK(DerivedArgList &Args,
18011803

18021804
std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple,
18031805
const Driver &TheDriver) {
1804-
VersionTuple OsVersion;
1806+
unsigned Major, Minor, Micro;
18051807
llvm::Triple SystemTriple(llvm::sys::getProcessTriple());
18061808
switch (OS) {
18071809
case llvm::Triple::Darwin:
@@ -1810,32 +1812,32 @@ std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple,
18101812
// macos, use the host triple to infer OS version.
18111813
if (Triple.isMacOSX() && SystemTriple.isMacOSX() &&
18121814
!Triple.getOSMajorVersion())
1813-
SystemTriple.getMacOSXVersion(OsVersion);
1814-
else if (!Triple.getMacOSXVersion(OsVersion))
1815+
SystemTriple.getMacOSXVersion(Major, Minor, Micro);
1816+
else if (!Triple.getMacOSXVersion(Major, Minor, Micro))
18151817
TheDriver.Diag(diag::err_drv_invalid_darwin_version)
18161818
<< Triple.getOSName();
18171819
break;
18181820
case llvm::Triple::IOS:
18191821
if (Triple.isMacCatalystEnvironment() && !Triple.getOSMajorVersion()) {
1820-
OsVersion = VersionTuple(13, 1);
1822+
Major = 13;
1823+
Minor = 1;
1824+
Micro = 0;
18211825
} else
1822-
OsVersion = Triple.getiOSVersion();
1826+
Triple.getiOSVersion(Major, Minor, Micro);
18231827
break;
18241828
case llvm::Triple::TvOS:
1825-
OsVersion = Triple.getOSVersion();
1829+
Triple.getOSVersion(Major, Minor, Micro);
18261830
break;
18271831
case llvm::Triple::WatchOS:
1828-
OsVersion = Triple.getWatchOSVersion();
1832+
Triple.getWatchOSVersion(Major, Minor, Micro);
18291833
break;
18301834
default:
18311835
llvm_unreachable("Unexpected OS type");
18321836
break;
18331837
}
18341838

18351839
std::string OSVersion;
1836-
llvm::raw_string_ostream(OSVersion)
1837-
<< OsVersion.getMajor() << '.' << OsVersion.getMinor().getValueOr(0)
1838-
<< '.' << OsVersion.getSubminor().getValueOr(0);
1840+
llvm::raw_string_ostream(OSVersion) << Major << '.' << Minor << '.' << Micro;
18391841
return OSVersion;
18401842
}
18411843

@@ -1905,13 +1907,15 @@ getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args,
19051907
return None;
19061908
}
19071909

1908-
VersionTuple Version = TT.getOSVersion();
1909-
if (!Version.getMajor()) {
1910+
unsigned Major, Minor, Micro;
1911+
TT.getOSVersion(Major, Minor, Micro);
1912+
if (!Major) {
19101913
TheDriver.Diag(diag::err_drv_invalid_version_number)
19111914
<< A->getAsString(Args);
19121915
return None;
19131916
}
1914-
return DarwinPlatform::createFromMTargetOS(TT.getOS(), Version,
1917+
return DarwinPlatform::createFromMTargetOS(TT.getOS(),
1918+
VersionTuple(Major, Minor, Micro),
19151919
TT.getEnvironment(), A, SDKInfo);
19161920
}
19171921

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
277277
// Android sysroots contain a library directory for each supported OS
278278
// version as well as some unversioned libraries in the usual multiarch
279279
// directory.
280-
addPathIfExists(
281-
D,
282-
SysRoot + "/usr/lib/" + MultiarchTriple + "/" +
283-
llvm::to_string(Triple.getEnvironmentVersion().getMajor()),
284-
Paths);
280+
unsigned Major;
281+
unsigned Minor;
282+
unsigned Micro;
283+
Triple.getEnvironmentVersion(Major, Minor, Micro);
284+
addPathIfExists(D,
285+
SysRoot + "/usr/lib/" + MultiarchTriple + "/" +
286+
llvm::to_string(Major),
287+
Paths);
285288
}
286289

287290
addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);

clang/lib/Driver/ToolChains/MSVC.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1194,6 +1194,14 @@ bool MSVCToolChain::getUniversalCRTLibraryPath(const ArgList &Args,
11941194
return true;
11951195
}
11961196

1197+
static VersionTuple getMSVCVersionFromTriple(const llvm::Triple &Triple) {
1198+
unsigned Major, Minor, Micro;
1199+
Triple.getEnvironmentVersion(Major, Minor, Micro);
1200+
if (Major || Minor || Micro)
1201+
return VersionTuple(Major, Minor, Micro);
1202+
return VersionTuple();
1203+
}
1204+
11971205
static VersionTuple getMSVCVersionFromExe(const std::string &BinDir) {
11981206
VersionTuple Version;
11991207
#ifdef _WIN32
@@ -1366,7 +1374,7 @@ VersionTuple MSVCToolChain::computeMSVCVersion(const Driver *D,
13661374
bool IsWindowsMSVC = getTriple().isWindowsMSVCEnvironment();
13671375
VersionTuple MSVT = ToolChain::computeMSVCVersion(D, Args);
13681376
if (MSVT.empty())
1369-
MSVT = getTriple().getEnvironmentVersion();
1377+
MSVT = getMSVCVersionFromTriple(getTriple());
13701378
if (MSVT.empty() && IsWindowsMSVC)
13711379
MSVT = getMSVCVersionFromExe(getSubDirectoryPath(SubDirectoryType::Bin));
13721380
if (MSVT.empty() &&

0 commit comments

Comments
 (0)