Skip to content

Commit 21ed37e

Browse files
mgornytru
authored andcommitted
[LLVM] [Clang] Backport "Support for Gentoo *t64 triples (64-bit time_t ABIs)"
This is a backport of 387b37a for 19.x, adjusted to add new Triple::EnvironmentType members at the end to avoid breaking backwards ABI compatibility. Gentoo is planning to introduce a `*t64` suffix for triples that will be used by 32-bit platforms that use 64-bit `time_t`. Add support for parsing and accepting these triples, and while at it make clang automatically enable the necessary glibc feature macros when this suffix is used.
1 parent 19c571a commit 21ed37e

File tree

16 files changed

+138
-12
lines changed

16 files changed

+138
-12
lines changed

clang/lib/Basic/Targets/ARM.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,9 @@ ARMTargetInfo::ARMTargetInfo(const llvm::Triple &Triple,
311311
switch (Triple.getEnvironment()) {
312312
case llvm::Triple::Android:
313313
case llvm::Triple::GNUEABI:
314+
case llvm::Triple::GNUEABIT64:
314315
case llvm::Triple::GNUEABIHF:
316+
case llvm::Triple::GNUEABIHFT64:
315317
case llvm::Triple::MuslEABI:
316318
case llvm::Triple::MuslEABIHF:
317319
case llvm::Triple::OpenHOS:

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
337337
Builder.defineMacro("_GNU_SOURCE");
338338
if (this->HasFloat128)
339339
Builder.defineMacro("__FLOAT128__");
340+
if (Triple.isTime64ABI()) {
341+
Builder.defineMacro("_FILE_OFFSET_BITS", "64");
342+
Builder.defineMacro("_TIME_BITS", "64");
343+
}
340344
}
341345

342346
public:

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,7 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
177177
else if (ABIStr == "aapcs16")
178178
Kind = ARMABIKind::AAPCS16_VFP;
179179
else if (CodeGenOpts.FloatABI == "hard" ||
180-
(CodeGenOpts.FloatABI != "soft" &&
181-
(Triple.getEnvironment() == llvm::Triple::GNUEABIHF ||
182-
Triple.getEnvironment() == llvm::Triple::MuslEABIHF ||
183-
Triple.getEnvironment() == llvm::Triple::EABIHF)))
180+
(CodeGenOpts.FloatABI != "soft" && Triple.isHardFloatABI()))
184181
Kind = ARMABIKind::AAPCS_VFP;
185182

186183
return createARMTargetCodeGenInfo(CGM, Kind);

clang/lib/CodeGen/Targets/ARM.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ class ARMABIInfo : public ABIInfo {
3535
case llvm::Triple::EABI:
3636
case llvm::Triple::EABIHF:
3737
case llvm::Triple::GNUEABI:
38+
case llvm::Triple::GNUEABIT64:
3839
case llvm::Triple::GNUEABIHF:
40+
case llvm::Triple::GNUEABIHFT64:
3941
case llvm::Triple::MuslEABI:
4042
case llvm::Triple::MuslEABIHF:
4143
return true;
@@ -48,6 +50,7 @@ class ARMABIInfo : public ABIInfo {
4850
switch (getTarget().getTriple().getEnvironment()) {
4951
case llvm::Triple::EABIHF:
5052
case llvm::Triple::GNUEABIHF:
53+
case llvm::Triple::GNUEABIHFT64:
5154
case llvm::Triple::MuslEABIHF:
5255
return true;
5356
default:

clang/lib/Driver/Driver.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,8 @@ static llvm::Triple computeTargetTriple(const Driver &D,
602602
if (A->getOption().matches(options::OPT_m64) ||
603603
A->getOption().matches(options::OPT_maix64)) {
604604
AT = Target.get64BitArchVariant().getArch();
605-
if (Target.getEnvironment() == llvm::Triple::GNUX32)
605+
if (Target.getEnvironment() == llvm::Triple::GNUX32 ||
606+
Target.getEnvironment() == llvm::Triple::GNUT64)
606607
Target.setEnvironment(llvm::Triple::GNU);
607608
else if (Target.getEnvironment() == llvm::Triple::MuslX32)
608609
Target.setEnvironment(llvm::Triple::Musl);
@@ -665,11 +666,13 @@ static llvm::Triple computeTargetTriple(const Driver &D,
665666
} else if (ABIName == "n32") {
666667
Target = Target.get64BitArchVariant();
667668
if (Target.getEnvironment() == llvm::Triple::GNU ||
669+
Target.getEnvironment() == llvm::Triple::GNUT64 ||
668670
Target.getEnvironment() == llvm::Triple::GNUABI64)
669671
Target.setEnvironment(llvm::Triple::GNUABIN32);
670672
} else if (ABIName == "64") {
671673
Target = Target.get64BitArchVariant();
672674
if (Target.getEnvironment() == llvm::Triple::GNU ||
675+
Target.getEnvironment() == llvm::Triple::GNUT64 ||
673676
Target.getEnvironment() == llvm::Triple::GNUABIN32)
674677
Target.setEnvironment(llvm::Triple::GNUABI64);
675678
}

clang/lib/Driver/ToolChains/Arch/ARM.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ void arm::setFloatABIInTriple(const Driver &D, const ArgList &Args,
327327
Triple.setEnvironment(isHardFloat ? llvm::Triple::GNUEABIHF
328328
: llvm::Triple::GNUEABI);
329329
break;
330+
case llvm::Triple::GNUEABIT64:
331+
case llvm::Triple::GNUEABIHFT64:
332+
Triple.setEnvironment(isHardFloat ? llvm::Triple::GNUEABIHFT64
333+
: llvm::Triple::GNUEABIT64);
334+
break;
330335
case llvm::Triple::EABI:
331336
case llvm::Triple::EABIHF:
332337
Triple.setEnvironment(isHardFloat ? llvm::Triple::EABIHF
@@ -414,10 +419,12 @@ arm::FloatABI arm::getDefaultFloatABI(const llvm::Triple &Triple) {
414419
return FloatABI::Soft;
415420
switch (Triple.getEnvironment()) {
416421
case llvm::Triple::GNUEABIHF:
422+
case llvm::Triple::GNUEABIHFT64:
417423
case llvm::Triple::MuslEABIHF:
418424
case llvm::Triple::EABIHF:
419425
return FloatABI::Hard;
420426
case llvm::Triple::GNUEABI:
427+
case llvm::Triple::GNUEABIT64:
421428
case llvm::Triple::MuslEABI:
422429
case llvm::Triple::EABI:
423430
// EABI is always AAPCS, and if it was not marked 'hard', it's softfp

clang/lib/Driver/ToolChains/Gnu.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
26942694
case llvm::Triple::thumb:
26952695
LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
26962696
if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF ||
2697+
TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHFT64 ||
26972698
TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF ||
26982699
TargetTriple.getEnvironment() == llvm::Triple::EABIHF) {
26992700
TripleAliases.append(begin(ARMHFTriples), end(ARMHFTriples));
@@ -2705,6 +2706,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
27052706
case llvm::Triple::thumbeb:
27062707
LibDirs.append(begin(ARMebLibDirs), end(ARMebLibDirs));
27072708
if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF ||
2709+
TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHFT64 ||
27082710
TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF ||
27092711
TargetTriple.getEnvironment() == llvm::Triple::EABIHF) {
27102712
TripleAliases.append(begin(ARMebHFTriples), end(ARMebHFTriples));

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
508508
case llvm::Triple::thumbeb: {
509509
const bool HF =
510510
Triple.getEnvironment() == llvm::Triple::GNUEABIHF ||
511+
Triple.getEnvironment() == llvm::Triple::GNUEABIHFT64 ||
511512
tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard;
512513

513514
LibDir = "lib";

clang/test/Preprocessor/time64.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %clang_cc1 -E -dM -triple=i686-pc-linux-gnu /dev/null | FileCheck -match-full-lines -check-prefix TIME32 %s
2+
// RUN: %clang_cc1 -E -dM -triple=i686-pc-linux-gnut64 /dev/null | FileCheck -match-full-lines -check-prefix TIME64 %s
3+
// RUN: %clang_cc1 -E -dM -triple=armv5tel-softfloat-linux-gnueabi /dev/null | FileCheck -match-full-lines -check-prefix TIME32 %s
4+
// RUN: %clang_cc1 -E -dM -triple=armv5tel-softfloat-linux-gnueabit64 /dev/null | FileCheck -match-full-lines -check-prefix TIME64 %s
5+
// RUN: %clang_cc1 -E -dM -triple=armv7a-unknown-linux-gnueabihf /dev/null | FileCheck -match-full-lines -check-prefix TIME32 %s
6+
// RUN: %clang_cc1 -E -dM -triple=armv7a-unknown-linux-gnueabihft64 /dev/null | FileCheck -match-full-lines -check-prefix TIME64 %s
7+
//
8+
// TIME32-NOT:#define _FILE_OFFSET_BITS 64
9+
// TIME32-NOT:#define _TIME_BITS 64
10+
//
11+
// TIME64:#define _FILE_OFFSET_BITS 64
12+
// TIME64:#define _TIME_BITS 64

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,11 @@ class Triple {
294294

295295
PAuthTest,
296296

297-
LastEnvironmentType = PAuthTest
297+
GNUT64,
298+
GNUEABIT64,
299+
GNUEABIHFT64,
300+
301+
LastEnvironmentType = GNUEABIHFT64
298302
};
299303
enum ObjectFormatType {
300304
UnknownObjectFormat,
@@ -605,11 +609,12 @@ class Triple {
605609

606610
bool isGNUEnvironment() const {
607611
EnvironmentType Env = getEnvironment();
608-
return Env == Triple::GNU || Env == Triple::GNUABIN32 ||
609-
Env == Triple::GNUABI64 || Env == Triple::GNUEABI ||
610-
Env == Triple::GNUEABIHF || Env == Triple::GNUF32 ||
611-
Env == Triple::GNUF64 || Env == Triple::GNUSF ||
612-
Env == Triple::GNUX32;
612+
return Env == Triple::GNU || Env == Triple::GNUT64 ||
613+
Env == Triple::GNUABIN32 || Env == Triple::GNUABI64 ||
614+
Env == Triple::GNUEABI || Env == Triple::GNUEABIT64 ||
615+
Env == Triple::GNUEABIHF || Env == Triple::GNUEABIHFT64 ||
616+
Env == Triple::GNUF32 || Env == Triple::GNUF64 ||
617+
Env == Triple::GNUSF || Env == Triple::GNUX32;
613618
}
614619

615620
/// Tests whether the OS is Haiku.
@@ -866,9 +871,11 @@ class Triple {
866871
return (isARM() || isThumb()) &&
867872
(getEnvironment() == Triple::EABI ||
868873
getEnvironment() == Triple::GNUEABI ||
874+
getEnvironment() == Triple::GNUEABIT64 ||
869875
getEnvironment() == Triple::MuslEABI ||
870876
getEnvironment() == Triple::EABIHF ||
871877
getEnvironment() == Triple::GNUEABIHF ||
878+
getEnvironment() == Triple::GNUEABIHFT64 ||
872879
getEnvironment() == Triple::OpenHOS ||
873880
getEnvironment() == Triple::MuslEABIHF || isAndroid()) &&
874881
isOSBinFormatELF();
@@ -1046,6 +1053,22 @@ class Triple {
10461053
return getArch() == Triple::bpfel || getArch() == Triple::bpfeb;
10471054
}
10481055

1056+
/// Tests if the target forces 64-bit time_t on a 32-bit architecture.
1057+
bool isTime64ABI() const {
1058+
EnvironmentType Env = getEnvironment();
1059+
return Env == Triple::GNUT64 || Env == Triple::GNUEABIT64 ||
1060+
Env == Triple::GNUEABIHFT64;
1061+
}
1062+
1063+
/// Tests if the target forces hardfloat.
1064+
bool isHardFloatABI() const {
1065+
EnvironmentType Env = getEnvironment();
1066+
return Env == llvm::Triple::GNUEABIHF ||
1067+
Env == llvm::Triple::GNUEABIHFT64 ||
1068+
Env == llvm::Triple::MuslEABIHF ||
1069+
Env == llvm::Triple::EABIHF;
1070+
}
1071+
10491072
/// Tests whether the target supports comdat
10501073
bool supportsCOMDAT() const {
10511074
return !(isOSBinFormatMachO() || isOSBinFormatXCOFF() ||

llvm/lib/Target/ARM/ARMSubtarget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,9 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
325325
}
326326
bool isTargetGNUAEABI() const {
327327
return (TargetTriple.getEnvironment() == Triple::GNUEABI ||
328-
TargetTriple.getEnvironment() == Triple::GNUEABIHF) &&
328+
TargetTriple.getEnvironment() == Triple::GNUEABIT64 ||
329+
TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
330+
TargetTriple.getEnvironment() == Triple::GNUEABIHFT64) &&
329331
!isTargetDarwin() && !isTargetWindows();
330332
}
331333
bool isTargetMuslAEABI() const {

llvm/lib/Target/ARM/ARMTargetMachine.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,9 @@ ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, const Triple &TT,
241241
Options.EABIVersion == EABI::Unknown) {
242242
// musl is compatible with glibc with regard to EABI version
243243
if ((TargetTriple.getEnvironment() == Triple::GNUEABI ||
244+
TargetTriple.getEnvironment() == Triple::GNUEABIT64 ||
244245
TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
246+
TargetTriple.getEnvironment() == Triple::GNUEABIHFT64 ||
245247
TargetTriple.getEnvironment() == Triple::MuslEABI ||
246248
TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
247249
TargetTriple.getEnvironment() == Triple::OpenHOS) &&

llvm/lib/Target/ARM/ARMTargetMachine.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class ARMBaseTargetMachine : public LLVMTargetMachine {
6464

6565
bool isTargetHardFloat() const {
6666
return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
67+
TargetTriple.getEnvironment() == Triple::GNUEABIHFT64 ||
6768
TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
6869
TargetTriple.getEnvironment() == Triple::EABIHF ||
6970
(TargetTriple.isOSBinFormatMachO() &&

llvm/lib/TargetParser/ARMTargetParser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,9 @@ StringRef ARM::computeDefaultTargetABI(const Triple &TT, StringRef CPU) {
554554
switch (TT.getEnvironment()) {
555555
case Triple::Android:
556556
case Triple::GNUEABI:
557+
case Triple::GNUEABIT64:
557558
case Triple::GNUEABIHF:
559+
case Triple::GNUEABIHFT64:
558560
case Triple::MuslEABI:
559561
case Triple::MuslEABIHF:
560562
case Triple::OpenHOS:
@@ -635,6 +637,7 @@ StringRef ARM::getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch) {
635637
switch (Triple.getEnvironment()) {
636638
case llvm::Triple::EABIHF:
637639
case llvm::Triple::GNUEABIHF:
640+
case llvm::Triple::GNUEABIHFT64:
638641
case llvm::Triple::MuslEABIHF:
639642
return "arm1176jzf-s";
640643
default:

llvm/lib/TargetParser/Triple.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,10 +317,13 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
317317
case EABI: return "eabi";
318318
case EABIHF: return "eabihf";
319319
case GNU: return "gnu";
320+
case GNUT64: return "gnut64";
320321
case GNUABI64: return "gnuabi64";
321322
case GNUABIN32: return "gnuabin32";
322323
case GNUEABI: return "gnueabi";
324+
case GNUEABIT64: return "gnueabit64";
323325
case GNUEABIHF: return "gnueabihf";
326+
case GNUEABIHFT64: return "gnueabihft64";
324327
case GNUF32: return "gnuf32";
325328
case GNUF64: return "gnuf64";
326329
case GNUSF: return "gnusf";
@@ -693,14 +696,17 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
693696
.StartsWith("eabi", Triple::EABI)
694697
.StartsWith("gnuabin32", Triple::GNUABIN32)
695698
.StartsWith("gnuabi64", Triple::GNUABI64)
699+
.StartsWith("gnueabihft64", Triple::GNUEABIHFT64)
696700
.StartsWith("gnueabihf", Triple::GNUEABIHF)
701+
.StartsWith("gnueabit64", Triple::GNUEABIT64)
697702
.StartsWith("gnueabi", Triple::GNUEABI)
698703
.StartsWith("gnuf32", Triple::GNUF32)
699704
.StartsWith("gnuf64", Triple::GNUF64)
700705
.StartsWith("gnusf", Triple::GNUSF)
701706
.StartsWith("gnux32", Triple::GNUX32)
702707
.StartsWith("gnu_ilp32", Triple::GNUILP32)
703708
.StartsWith("code16", Triple::CODE16)
709+
.StartsWith("gnut64", Triple::GNUT64)
704710
.StartsWith("gnu", Triple::GNU)
705711
.StartsWith("android", Triple::Android)
706712
.StartsWith("musleabihf", Triple::MuslEABIHF)

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ TEST(TripleTest, ParsedIDs) {
9393
EXPECT_EQ(Triple::Hurd, T.getOS());
9494
EXPECT_EQ(Triple::GNU, T.getEnvironment());
9595

96+
T = Triple("i686-pc-linux-gnu");
97+
EXPECT_EQ(Triple::x86, T.getArch());
98+
EXPECT_EQ(Triple::PC, T.getVendor());
99+
EXPECT_EQ(Triple::Linux, T.getOS());
100+
EXPECT_EQ(Triple::GNU, T.getEnvironment());
101+
EXPECT_FALSE(T.isTime64ABI());
102+
96103
T = Triple("x86_64-pc-linux-gnu");
97104
EXPECT_EQ(Triple::x86_64, T.getArch());
98105
EXPECT_EQ(Triple::PC, T.getVendor());
@@ -187,24 +194,52 @@ TEST(TripleTest, ParsedIDs) {
187194
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
188195
EXPECT_EQ(Triple::UnknownOS, T.getOS());
189196
EXPECT_EQ(Triple::EABI, T.getEnvironment());
197+
EXPECT_FALSE(T.isHardFloatABI());
198+
199+
T = Triple("arm-none-none-eabihf");
200+
EXPECT_EQ(Triple::arm, T.getArch());
201+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
202+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
203+
EXPECT_EQ(Triple::EABIHF, T.getEnvironment());
204+
EXPECT_TRUE(T.isHardFloatABI());
190205

191206
T = Triple("arm-none-linux-musleabi");
192207
EXPECT_EQ(Triple::arm, T.getArch());
193208
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
194209
EXPECT_EQ(Triple::Linux, T.getOS());
195210
EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
211+
EXPECT_FALSE(T.isHardFloatABI());
212+
213+
T = Triple("arm-none-linux-musleabihf");
214+
EXPECT_EQ(Triple::arm, T.getArch());
215+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
216+
EXPECT_EQ(Triple::Linux, T.getOS());
217+
EXPECT_EQ(Triple::MuslEABIHF, T.getEnvironment());
218+
EXPECT_TRUE(T.isHardFloatABI());
196219

197220
T = Triple("armv6hl-none-linux-gnueabi");
198221
EXPECT_EQ(Triple::arm, T.getArch());
199222
EXPECT_EQ(Triple::Linux, T.getOS());
200223
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
201224
EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
225+
EXPECT_FALSE(T.isTime64ABI());
226+
EXPECT_FALSE(T.isHardFloatABI());
202227

203228
T = Triple("armv7hl-none-linux-gnueabi");
204229
EXPECT_EQ(Triple::arm, T.getArch());
205230
EXPECT_EQ(Triple::Linux, T.getOS());
206231
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
207232
EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
233+
EXPECT_FALSE(T.isTime64ABI());
234+
EXPECT_FALSE(T.isHardFloatABI());
235+
236+
T = Triple("armv7hl-none-linux-gnueabihf");
237+
EXPECT_EQ(Triple::arm, T.getArch());
238+
EXPECT_EQ(Triple::Linux, T.getOS());
239+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
240+
EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
241+
EXPECT_FALSE(T.isTime64ABI());
242+
EXPECT_TRUE(T.isHardFloatABI());
208243

209244
T = Triple("amdil-unknown-unknown");
210245
EXPECT_EQ(Triple::amdil, T.getArch());
@@ -1175,6 +1210,29 @@ TEST(TripleTest, ParsedIDs) {
11751210
EXPECT_EQ(Triple::Linux, T.getOS());
11761211
EXPECT_EQ(Triple::PAuthTest, T.getEnvironment());
11771212

1213+
// Gentoo time64 triples
1214+
T = Triple("i686-pc-linux-gnut64");
1215+
EXPECT_EQ(Triple::x86, T.getArch());
1216+
EXPECT_EQ(Triple::PC, T.getVendor());
1217+
EXPECT_EQ(Triple::Linux, T.getOS());
1218+
EXPECT_EQ(Triple::GNUT64, T.getEnvironment());
1219+
EXPECT_TRUE(T.isTime64ABI());
1220+
1221+
T = Triple("armv5tel-softfloat-linux-gnueabit64");
1222+
EXPECT_EQ(Triple::arm, T.getArch());
1223+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1224+
EXPECT_EQ(Triple::Linux, T.getOS());
1225+
EXPECT_EQ(Triple::GNUEABIT64, T.getEnvironment());
1226+
EXPECT_TRUE(T.isTime64ABI());
1227+
1228+
T = Triple("armv7a-unknown-linux-gnueabihft64");
1229+
EXPECT_EQ(Triple::arm, T.getArch());
1230+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1231+
EXPECT_EQ(Triple::Linux, T.getOS());
1232+
EXPECT_EQ(Triple::GNUEABIHFT64, T.getEnvironment());
1233+
EXPECT_TRUE(T.isTime64ABI());
1234+
EXPECT_TRUE(T.isHardFloatABI());
1235+
11781236
T = Triple("huh");
11791237
EXPECT_EQ(Triple::UnknownArch, T.getArch());
11801238
}

0 commit comments

Comments
 (0)