Skip to content

Commit bc04674

Browse files
author
git apple-llvm automerger
committed
Merge commit '40d5eeac6cd8' from llvm.org/main into next
2 parents c0d17c2 + 40d5eea commit bc04674

23 files changed

+377
-292
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
@@ -51,12 +51,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
5151
Builder.defineMacro("_REENTRANT");
5252

5353
// Get the platform type and version number from the triple.
54-
VersionTuple OsVersion;
54+
unsigned Maj, Min, Rev;
5555
if (Triple.isMacOSX()) {
56-
Triple.getMacOSXVersion(OsVersion);
56+
Triple.getMacOSXVersion(Maj, Min, Rev);
5757
PlatformName = "macos";
5858
} else {
59-
OsVersion = Triple.getOSVersion();
59+
Triple.getOSVersion(Maj, Min, Rev);
6060
PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
6161
if (PlatformName == "ios" && Triple.isMacCatalystEnvironment())
6262
PlatformName = "maccatalyst";
@@ -66,29 +66,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
6666
// generating code for Win32 ABI. No need to emit
6767
// __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__.
6868
if (PlatformName == "win32") {
69-
PlatformMinVersion = OsVersion;
69+
PlatformMinVersion = VersionTuple(Maj, Min, Rev);
7070
return;
7171
}
7272

7373
// Set the appropriate OS version define.
7474
if (Triple.isiOS()) {
75-
assert(OsVersion < VersionTuple(100) && "Invalid version!");
75+
assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!");
7676
char Str[7];
77-
if (OsVersion.getMajor() < 10) {
78-
Str[0] = '0' + OsVersion.getMajor();
79-
Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
80-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
81-
Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
82-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
77+
if (Maj < 10) {
78+
Str[0] = '0' + Maj;
79+
Str[1] = '0' + (Min / 10);
80+
Str[2] = '0' + (Min % 10);
81+
Str[3] = '0' + (Rev / 10);
82+
Str[4] = '0' + (Rev % 10);
8383
Str[5] = '\0';
8484
} else {
8585
// Handle versions >= 10.
86-
Str[0] = '0' + (OsVersion.getMajor() / 10);
87-
Str[1] = '0' + (OsVersion.getMajor() % 10);
88-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
89-
Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
90-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
91-
Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
86+
Str[0] = '0' + (Maj / 10);
87+
Str[1] = '0' + (Maj % 10);
88+
Str[2] = '0' + (Min / 10);
89+
Str[3] = '0' + (Min % 10);
90+
Str[4] = '0' + (Rev / 10);
91+
Str[5] = '0' + (Rev % 10);
9292
Str[6] = '\0';
9393
}
9494
if (Triple.isTvOS())
@@ -98,36 +98,36 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
9898
Str);
9999

100100
} else if (Triple.isWatchOS()) {
101-
assert(OsVersion < VersionTuple(10) && "Invalid version!");
101+
assert(Maj < 10 && Min < 100 && Rev < 100 && "Invalid version!");
102102
char Str[6];
103-
Str[0] = '0' + OsVersion.getMajor();
104-
Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
105-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
106-
Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
107-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
103+
Str[0] = '0' + Maj;
104+
Str[1] = '0' + (Min / 10);
105+
Str[2] = '0' + (Min % 10);
106+
Str[3] = '0' + (Rev / 10);
107+
Str[4] = '0' + (Rev % 10);
108108
Str[5] = '\0';
109109
Builder.defineMacro("__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__", Str);
110110
} else if (Triple.isMacOSX()) {
111111
// Note that the Driver allows versions which aren't representable in the
112112
// define (because we only get a single digit for the minor and micro
113113
// revision numbers). So, we limit them to the maximum representable
114114
// version.
115-
assert(OsVersion < VersionTuple(100) && "Invalid version!");
115+
assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!");
116116
char Str[7];
117-
if (OsVersion < VersionTuple(10, 10)) {
118-
Str[0] = '0' + (OsVersion.getMajor() / 10);
119-
Str[1] = '0' + (OsVersion.getMajor() % 10);
120-
Str[2] = '0' + std::min(OsVersion.getMinor().getValueOr(0), 9U);
121-
Str[3] = '0' + std::min(OsVersion.getSubminor().getValueOr(0), 9U);
117+
if (Maj < 10 || (Maj == 10 && Min < 10)) {
118+
Str[0] = '0' + (Maj / 10);
119+
Str[1] = '0' + (Maj % 10);
120+
Str[2] = '0' + std::min(Min, 9U);
121+
Str[3] = '0' + std::min(Rev, 9U);
122122
Str[4] = '\0';
123123
} else {
124124
// Handle versions > 10.9.
125-
Str[0] = '0' + (OsVersion.getMajor() / 10);
126-
Str[1] = '0' + (OsVersion.getMajor() % 10);
127-
Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10);
128-
Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10);
129-
Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10);
130-
Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
125+
Str[0] = '0' + (Maj / 10);
126+
Str[1] = '0' + (Maj % 10);
127+
Str[2] = '0' + (Min / 10);
128+
Str[3] = '0' + (Min % 10);
129+
Str[4] = '0' + (Rev / 10);
130+
Str[5] = '0' + (Rev % 10);
131131
Str[6] = '\0';
132132
}
133133
Builder.defineMacro("__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__", Str);
@@ -137,7 +137,7 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
137137
if (Triple.isOSDarwin())
138138
Builder.defineMacro("__MACH__");
139139

140-
PlatformMinVersion = OsVersion;
140+
PlatformMinVersion = VersionTuple(Maj, Min, Rev);
141141
}
142142

143143
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
@@ -1448,8 +1448,8 @@ static std::string getSystemOrSDKMacOSVersion(StringRef MacOSSDKVersion) {
14481448
llvm::Triple SystemTriple(llvm::sys::getProcessTriple());
14491449
if (!SystemTriple.isMacOSX())
14501450
return std::string(MacOSSDKVersion);
1451-
VersionTuple SystemVersion;
1452-
SystemTriple.getMacOSXVersion(SystemVersion);
1451+
SystemTriple.getMacOSXVersion(Major, Minor, Micro);
1452+
VersionTuple SystemVersion(Major, Minor, Micro);
14531453
bool HadExtra;
14541454
if (!Driver::GetReleaseVersion(MacOSSDKVersion, Major, Minor, Micro,
14551455
HadExtra))
@@ -1590,10 +1590,12 @@ struct DarwinPlatform {
15901590
const Optional<DarwinSDKInfo> &SDKInfo) {
15911591
DarwinPlatform Result(TargetArg, getPlatformFromOS(TT.getOS()), OSVersion,
15921592
A);
1593-
VersionTuple OsVersion = TT.getOSVersion();
1594-
if (OsVersion.getMajor() == 0)
1593+
unsigned Major, Minor, Micro;
1594+
TT.getOSVersion(Major, Minor, Micro);
1595+
if (Major == 0)
15951596
Result.HasOSVersion = false;
1596-
Result.setEnvironment(TT.getEnvironment(), OsVersion, SDKInfo);
1597+
Result.setEnvironment(TT.getEnvironment(),
1598+
VersionTuple(Major, Minor, Micro), SDKInfo);
15971599
return Result;
15981600
}
15991601
static DarwinPlatform
@@ -1839,7 +1841,7 @@ inferDeploymentTargetFromSDK(DerivedArgList &Args,
18391841

18401842
std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple,
18411843
const Driver &TheDriver) {
1842-
VersionTuple OsVersion;
1844+
unsigned Major, Minor, Micro;
18431845
llvm::Triple SystemTriple(llvm::sys::getProcessTriple());
18441846
switch (OS) {
18451847
case llvm::Triple::Darwin:
@@ -1848,32 +1850,32 @@ std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple,
18481850
// macos, use the host triple to infer OS version.
18491851
if (Triple.isMacOSX() && SystemTriple.isMacOSX() &&
18501852
!Triple.getOSMajorVersion())
1851-
SystemTriple.getMacOSXVersion(OsVersion);
1852-
else if (!Triple.getMacOSXVersion(OsVersion))
1853+
SystemTriple.getMacOSXVersion(Major, Minor, Micro);
1854+
else if (!Triple.getMacOSXVersion(Major, Minor, Micro))
18531855
TheDriver.Diag(diag::err_drv_invalid_darwin_version)
18541856
<< Triple.getOSName();
18551857
break;
18561858
case llvm::Triple::IOS:
18571859
if (Triple.isMacCatalystEnvironment() && !Triple.getOSMajorVersion()) {
1858-
OsVersion = VersionTuple(13, 1);
1860+
Major = 13;
1861+
Minor = 1;
1862+
Micro = 0;
18591863
} else
1860-
OsVersion = Triple.getiOSVersion();
1864+
Triple.getiOSVersion(Major, Minor, Micro);
18611865
break;
18621866
case llvm::Triple::TvOS:
1863-
OsVersion = Triple.getOSVersion();
1867+
Triple.getOSVersion(Major, Minor, Micro);
18641868
break;
18651869
case llvm::Triple::WatchOS:
1866-
OsVersion = Triple.getWatchOSVersion();
1870+
Triple.getWatchOSVersion(Major, Minor, Micro);
18671871
break;
18681872
default:
18691873
llvm_unreachable("Unexpected OS type");
18701874
break;
18711875
}
18721876

18731877
std::string OSVersion;
1874-
llvm::raw_string_ostream(OSVersion)
1875-
<< OsVersion.getMajor() << '.' << OsVersion.getMinor().getValueOr(0)
1876-
<< '.' << OsVersion.getSubminor().getValueOr(0);
1878+
llvm::raw_string_ostream(OSVersion) << Major << '.' << Minor << '.' << Micro;
18771879
return OSVersion;
18781880
}
18791881

@@ -1943,13 +1945,15 @@ getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args,
19431945
return None;
19441946
}
19451947

1946-
VersionTuple Version = TT.getOSVersion();
1947-
if (!Version.getMajor()) {
1948+
unsigned Major, Minor, Micro;
1949+
TT.getOSVersion(Major, Minor, Micro);
1950+
if (!Major) {
19481951
TheDriver.Diag(diag::err_drv_invalid_version_number)
19491952
<< A->getAsString(Args);
19501953
return None;
19511954
}
1952-
return DarwinPlatform::createFromMTargetOS(TT.getOS(), Version,
1955+
return DarwinPlatform::createFromMTargetOS(TT.getOS(),
1956+
VersionTuple(Major, Minor, Micro),
19531957
TT.getEnvironment(), A, SDKInfo);
19541958
}
19551959

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)