1 //===----------- Triple.cpp - Triple unit tests ---------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "llvm/ADT/Triple.h"
11 #include "gtest/gtest.h"
12 
13 using namespace llvm;
14 
15 namespace {
16 
TEST(TripleTest,BasicParsing)17 TEST(TripleTest, BasicParsing) {
18   Triple T;
19 
20   T = Triple("");
21   EXPECT_EQ("", T.getArchName().str());
22   EXPECT_EQ("", T.getVendorName().str());
23   EXPECT_EQ("", T.getOSName().str());
24   EXPECT_EQ("", T.getEnvironmentName().str());
25 
26   T = Triple("-");
27   EXPECT_EQ("", T.getArchName().str());
28   EXPECT_EQ("", T.getVendorName().str());
29   EXPECT_EQ("", T.getOSName().str());
30   EXPECT_EQ("", T.getEnvironmentName().str());
31 
32   T = Triple("--");
33   EXPECT_EQ("", T.getArchName().str());
34   EXPECT_EQ("", T.getVendorName().str());
35   EXPECT_EQ("", T.getOSName().str());
36   EXPECT_EQ("", T.getEnvironmentName().str());
37 
38   T = Triple("---");
39   EXPECT_EQ("", T.getArchName().str());
40   EXPECT_EQ("", T.getVendorName().str());
41   EXPECT_EQ("", T.getOSName().str());
42   EXPECT_EQ("", T.getEnvironmentName().str());
43 
44   T = Triple("----");
45   EXPECT_EQ("", T.getArchName().str());
46   EXPECT_EQ("", T.getVendorName().str());
47   EXPECT_EQ("", T.getOSName().str());
48   EXPECT_EQ("-", T.getEnvironmentName().str());
49 
50   T = Triple("a");
51   EXPECT_EQ("a", T.getArchName().str());
52   EXPECT_EQ("", T.getVendorName().str());
53   EXPECT_EQ("", T.getOSName().str());
54   EXPECT_EQ("", T.getEnvironmentName().str());
55 
56   T = Triple("a-b");
57   EXPECT_EQ("a", T.getArchName().str());
58   EXPECT_EQ("b", T.getVendorName().str());
59   EXPECT_EQ("", T.getOSName().str());
60   EXPECT_EQ("", T.getEnvironmentName().str());
61 
62   T = Triple("a-b-c");
63   EXPECT_EQ("a", T.getArchName().str());
64   EXPECT_EQ("b", T.getVendorName().str());
65   EXPECT_EQ("c", T.getOSName().str());
66   EXPECT_EQ("", T.getEnvironmentName().str());
67 
68   T = Triple("a-b-c-d");
69   EXPECT_EQ("a", T.getArchName().str());
70   EXPECT_EQ("b", T.getVendorName().str());
71   EXPECT_EQ("c", T.getOSName().str());
72   EXPECT_EQ("d", T.getEnvironmentName().str());
73 }
74 
TEST(TripleTest,ParsedIDs)75 TEST(TripleTest, ParsedIDs) {
76   Triple T;
77 
78   T = Triple("i386-apple-darwin");
79   EXPECT_EQ(Triple::x86, T.getArch());
80   EXPECT_EQ(Triple::Apple, T.getVendor());
81   EXPECT_EQ(Triple::Darwin, T.getOS());
82   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
83 
84   T = Triple("i386-pc-elfiamcu");
85   EXPECT_EQ(Triple::x86, T.getArch());
86   EXPECT_EQ(Triple::PC, T.getVendor());
87   EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
88   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
89 
90   T = Triple("i386-pc-contiki-unknown");
91   EXPECT_EQ(Triple::x86, T.getArch());
92   EXPECT_EQ(Triple::PC, T.getVendor());
93   EXPECT_EQ(Triple::Contiki, T.getOS());
94   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
95 
96   T = Triple("i386-pc-hurd-gnu");
97   EXPECT_EQ(Triple::x86, T.getArch());
98   EXPECT_EQ(Triple::PC, T.getVendor());
99   EXPECT_EQ(Triple::Hurd, T.getOS());
100   EXPECT_EQ(Triple::GNU, T.getEnvironment());
101 
102   T = Triple("x86_64-pc-linux-gnu");
103   EXPECT_EQ(Triple::x86_64, T.getArch());
104   EXPECT_EQ(Triple::PC, T.getVendor());
105   EXPECT_EQ(Triple::Linux, T.getOS());
106   EXPECT_EQ(Triple::GNU, T.getEnvironment());
107 
108   T = Triple("x86_64-pc-linux-musl");
109   EXPECT_EQ(Triple::x86_64, T.getArch());
110   EXPECT_EQ(Triple::PC, T.getVendor());
111   EXPECT_EQ(Triple::Linux, T.getOS());
112   EXPECT_EQ(Triple::Musl, T.getEnvironment());
113 
114   T = Triple("powerpc-bgp-linux");
115   EXPECT_EQ(Triple::ppc, T.getArch());
116   EXPECT_EQ(Triple::BGP, T.getVendor());
117   EXPECT_EQ(Triple::Linux, T.getOS());
118   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
119 
120   T = Triple("powerpc-bgp-cnk");
121   EXPECT_EQ(Triple::ppc, T.getArch());
122   EXPECT_EQ(Triple::BGP, T.getVendor());
123   EXPECT_EQ(Triple::CNK, T.getOS());
124   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
125 
126   T = Triple("ppc-bgp-linux");
127   EXPECT_EQ(Triple::ppc, T.getArch());
128   EXPECT_EQ(Triple::BGP, T.getVendor());
129   EXPECT_EQ(Triple::Linux, T.getOS());
130   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
131 
132   T = Triple("ppc32-bgp-linux");
133   EXPECT_EQ(Triple::ppc, T.getArch());
134   EXPECT_EQ(Triple::BGP, T.getVendor());
135   EXPECT_EQ(Triple::Linux, T.getOS());
136   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
137 
138   T = Triple("powerpc64-bgq-linux");
139   EXPECT_EQ(Triple::ppc64, T.getArch());
140   EXPECT_EQ(Triple::BGQ, T.getVendor());
141   EXPECT_EQ(Triple::Linux, T.getOS());
142   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
143 
144   T = Triple("ppc64-bgq-linux");
145   EXPECT_EQ(Triple::ppc64, T.getArch());
146   EXPECT_EQ(Triple::BGQ, T.getVendor());
147   EXPECT_EQ(Triple::Linux, T.getOS());
148 
149   T = Triple("powerpc-ibm-aix");
150   EXPECT_EQ(Triple::ppc, T.getArch());
151   EXPECT_EQ(Triple::IBM, T.getVendor());
152   EXPECT_EQ(Triple::AIX, T.getOS());
153   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
154 
155   T = Triple("powerpc64-ibm-aix");
156   EXPECT_EQ(Triple::ppc64, T.getArch());
157   EXPECT_EQ(Triple::IBM, T.getVendor());
158   EXPECT_EQ(Triple::AIX, T.getOS());
159   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
160 
161   T = Triple("powerpc-dunno-notsure");
162   EXPECT_EQ(Triple::ppc, T.getArch());
163   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
164   EXPECT_EQ(Triple::UnknownOS, T.getOS());
165   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
166 
167   T = Triple("arm-none-none-eabi");
168   EXPECT_EQ(Triple::arm, T.getArch());
169   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
170   EXPECT_EQ(Triple::UnknownOS, T.getOS());
171   EXPECT_EQ(Triple::EABI, T.getEnvironment());
172 
173   T = Triple("arm-none-linux-musleabi");
174   EXPECT_EQ(Triple::arm, T.getArch());
175   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
176   EXPECT_EQ(Triple::Linux, T.getOS());
177   EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
178 
179   T = Triple("armv6hl-none-linux-gnueabi");
180   EXPECT_EQ(Triple::arm, T.getArch());
181   EXPECT_EQ(Triple::Linux, T.getOS());
182   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
183   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
184 
185   T = Triple("armv7hl-none-linux-gnueabi");
186   EXPECT_EQ(Triple::arm, T.getArch());
187   EXPECT_EQ(Triple::Linux, T.getOS());
188   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
189   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
190 
191   T = Triple("amdil-unknown-unknown");
192   EXPECT_EQ(Triple::amdil, T.getArch());
193   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
194   EXPECT_EQ(Triple::UnknownOS, T.getOS());
195 
196   T = Triple("amdil64-unknown-unknown");
197   EXPECT_EQ(Triple::amdil64, T.getArch());
198   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
199   EXPECT_EQ(Triple::UnknownOS, T.getOS());
200 
201   T = Triple("hsail-unknown-unknown");
202   EXPECT_EQ(Triple::hsail, T.getArch());
203   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
204   EXPECT_EQ(Triple::UnknownOS, T.getOS());
205 
206   T = Triple("hsail64-unknown-unknown");
207   EXPECT_EQ(Triple::hsail64, T.getArch());
208   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
209   EXPECT_EQ(Triple::UnknownOS, T.getOS());
210 
211   T = Triple("sparcel-unknown-unknown");
212   EXPECT_EQ(Triple::sparcel, T.getArch());
213   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
214   EXPECT_EQ(Triple::UnknownOS, T.getOS());
215 
216   T = Triple("spir-unknown-unknown");
217   EXPECT_EQ(Triple::spir, T.getArch());
218   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
219   EXPECT_EQ(Triple::UnknownOS, T.getOS());
220 
221   T = Triple("spir64-unknown-unknown");
222   EXPECT_EQ(Triple::spir64, T.getArch());
223   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
224   EXPECT_EQ(Triple::UnknownOS, T.getOS());
225 
226   T = Triple("x86_64-unknown-ananas");
227   EXPECT_EQ(Triple::x86_64, T.getArch());
228   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
229   EXPECT_EQ(Triple::Ananas, T.getOS());
230   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
231 
232   T = Triple("x86_64-unknown-cloudabi");
233   EXPECT_EQ(Triple::x86_64, T.getArch());
234   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
235   EXPECT_EQ(Triple::CloudABI, T.getOS());
236   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
237 
238   T = Triple("x86_64-unknown-fuchsia");
239   EXPECT_EQ(Triple::x86_64, T.getArch());
240   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
241   EXPECT_EQ(Triple::Fuchsia, T.getOS());
242   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
243 
244   T = Triple("x86_64-unknown-hermit");
245   EXPECT_EQ(Triple::x86_64, T.getArch());
246   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
247   EXPECT_EQ(Triple::HermitCore, T.getOS());
248   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
249 
250   T = Triple("wasm32-unknown-unknown");
251   EXPECT_EQ(Triple::wasm32, T.getArch());
252   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
253   EXPECT_EQ(Triple::UnknownOS, T.getOS());
254   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
255 
256   T = Triple("wasm32-unknown-wasi-musl");
257   EXPECT_EQ(Triple::wasm32, T.getArch());
258   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
259   EXPECT_EQ(Triple::WASI, T.getOS());
260   EXPECT_EQ(Triple::Musl, T.getEnvironment());
261 
262   T = Triple("wasm64-unknown-unknown");
263   EXPECT_EQ(Triple::wasm64, T.getArch());
264   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
265   EXPECT_EQ(Triple::UnknownOS, T.getOS());
266   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
267 
268   T = Triple("wasm64-unknown-wasi-musl");
269   EXPECT_EQ(Triple::wasm64, T.getArch());
270   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
271   EXPECT_EQ(Triple::WASI, T.getOS());
272   EXPECT_EQ(Triple::Musl, T.getEnvironment());
273 
274   T = Triple("avr-unknown-unknown");
275   EXPECT_EQ(Triple::avr, T.getArch());
276   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
277   EXPECT_EQ(Triple::UnknownOS, T.getOS());
278   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
279 
280   T = Triple("avr");
281   EXPECT_EQ(Triple::avr, T.getArch());
282   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
283   EXPECT_EQ(Triple::UnknownOS, T.getOS());
284   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
285 
286   T = Triple("lanai-unknown-unknown");
287   EXPECT_EQ(Triple::lanai, T.getArch());
288   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
289   EXPECT_EQ(Triple::UnknownOS, T.getOS());
290   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
291 
292   T = Triple("lanai");
293   EXPECT_EQ(Triple::lanai, T.getArch());
294   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
295   EXPECT_EQ(Triple::UnknownOS, T.getOS());
296   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
297 
298   T = Triple("amdgcn-mesa-mesa3d");
299   EXPECT_EQ(Triple::amdgcn, T.getArch());
300   EXPECT_EQ(Triple::Mesa, T.getVendor());
301   EXPECT_EQ(Triple::Mesa3D, T.getOS());
302   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
303 
304   T = Triple("amdgcn-amd-amdhsa");
305   EXPECT_EQ(Triple::amdgcn, T.getArch());
306   EXPECT_EQ(Triple::AMD, T.getVendor());
307   EXPECT_EQ(Triple::AMDHSA, T.getOS());
308   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
309 
310   T = Triple("amdgcn-amd-amdpal");
311   EXPECT_EQ(Triple::amdgcn, T.getArch());
312   EXPECT_EQ(Triple::AMD, T.getVendor());
313   EXPECT_EQ(Triple::AMDPAL, T.getOS());
314   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
315 
316   T = Triple("riscv32-unknown-unknown");
317   EXPECT_EQ(Triple::riscv32, T.getArch());
318   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
319   EXPECT_EQ(Triple::UnknownOS, T.getOS());
320   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
321 
322   T = Triple("riscv64-unknown-linux");
323   EXPECT_EQ(Triple::riscv64, T.getArch());
324   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
325   EXPECT_EQ(Triple::Linux, T.getOS());
326   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
327 
328   T = Triple("riscv64-unknown-freebsd");
329   EXPECT_EQ(Triple::riscv64, T.getArch());
330   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
331   EXPECT_EQ(Triple::FreeBSD, T.getOS());
332   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
333 
334   T = Triple("armv7hl-suse-linux-gnueabi");
335   EXPECT_EQ(Triple::arm, T.getArch());
336   EXPECT_EQ(Triple::SUSE, T.getVendor());
337   EXPECT_EQ(Triple::Linux, T.getOS());
338   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
339 
340   T = Triple("i586-pc-haiku");
341   EXPECT_EQ(Triple::x86, T.getArch());
342   EXPECT_EQ(Triple::PC, T.getVendor());
343   EXPECT_EQ(Triple::Haiku, T.getOS());
344   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
345 
346   T = Triple("x86_64-unknown-haiku");
347   EXPECT_EQ(Triple::x86_64, T.getArch());
348   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
349   EXPECT_EQ(Triple::Haiku, T.getOS());
350   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
351 
352   T = Triple("mips-mti-linux-gnu");
353   EXPECT_EQ(Triple::mips, T.getArch());
354   EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
355   EXPECT_EQ(Triple::Linux, T.getOS());
356   EXPECT_EQ(Triple::GNU, T.getEnvironment());
357 
358   T = Triple("mipsel-img-linux-gnu");
359   EXPECT_EQ(Triple::mipsel, T.getArch());
360   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
361   EXPECT_EQ(Triple::Linux, T.getOS());
362   EXPECT_EQ(Triple::GNU, T.getEnvironment());
363 
364   T = Triple("mips64-mti-linux-gnu");
365   EXPECT_EQ(Triple::mips64, T.getArch());
366   EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
367   EXPECT_EQ(Triple::Linux, T.getOS());
368   EXPECT_EQ(Triple::GNU, T.getEnvironment());
369 
370   T = Triple("mips64el-img-linux-gnu");
371   EXPECT_EQ(Triple::mips64el, T.getArch());
372   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
373   EXPECT_EQ(Triple::Linux, T.getOS());
374   EXPECT_EQ(Triple::GNU, T.getEnvironment());
375 
376   T = Triple("mips64el-img-linux-gnuabin32");
377   EXPECT_EQ(Triple::mips64el, T.getArch());
378   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
379   EXPECT_EQ(Triple::Linux, T.getOS());
380   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
381 
382   T = Triple("mips64el-unknown-linux-gnuabi64");
383   EXPECT_EQ(Triple::mips64el, T.getArch());
384   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
385   EXPECT_EQ(Triple::Linux, T.getOS());
386   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
387   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
388   T = Triple("mips64el");
389   EXPECT_EQ(Triple::mips64el, T.getArch());
390   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
391   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
392   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
393 
394   T = Triple("mips64-unknown-linux-gnuabi64");
395   EXPECT_EQ(Triple::mips64, T.getArch());
396   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
397   EXPECT_EQ(Triple::Linux, T.getOS());
398   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
399   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
400   T = Triple("mips64");
401   EXPECT_EQ(Triple::mips64, T.getArch());
402   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
403   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
404   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
405 
406   T = Triple("mipsisa64r6el-unknown-linux-gnuabi64");
407   EXPECT_EQ(Triple::mips64el, T.getArch());
408   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
409   EXPECT_EQ(Triple::Linux, T.getOS());
410   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
411   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
412   T = Triple("mips64r6el");
413   EXPECT_EQ(Triple::mips64el, T.getArch());
414   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
415   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
416   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
417   T = Triple("mipsisa64r6el");
418   EXPECT_EQ(Triple::mips64el, T.getArch());
419   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
420   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
421   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
422 
423   T = Triple("mipsisa64r6-unknown-linux-gnuabi64");
424   EXPECT_EQ(Triple::mips64, T.getArch());
425   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
426   EXPECT_EQ(Triple::Linux, T.getOS());
427   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
428   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
429   T = Triple("mips64r6");
430   EXPECT_EQ(Triple::mips64, T.getArch());
431   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
432   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
433   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
434   T = Triple("mipsisa64r6");
435   EXPECT_EQ(Triple::mips64, T.getArch());
436   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
437   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
438   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
439 
440   T = Triple("mips64el-unknown-linux-gnuabin32");
441   EXPECT_EQ(Triple::mips64el, T.getArch());
442   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
443   EXPECT_EQ(Triple::Linux, T.getOS());
444   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
445   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
446   T = Triple("mipsn32el");
447   EXPECT_EQ(Triple::mips64el, T.getArch());
448   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
449   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
450   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
451 
452   T = Triple("mips64-unknown-linux-gnuabin32");
453   EXPECT_EQ(Triple::mips64, T.getArch());
454   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
455   EXPECT_EQ(Triple::Linux, T.getOS());
456   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
457   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
458   T = Triple("mipsn32");
459   EXPECT_EQ(Triple::mips64, T.getArch());
460   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
461   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
462   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
463 
464   T = Triple("mipsisa64r6el-unknown-linux-gnuabin32");
465   EXPECT_EQ(Triple::mips64el, T.getArch());
466   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
467   EXPECT_EQ(Triple::Linux, T.getOS());
468   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
469   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
470   T = Triple("mipsn32r6el");
471   EXPECT_EQ(Triple::mips64el, T.getArch());
472   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
473   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
474   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
475 
476   T = Triple("mipsisa64r6-unknown-linux-gnuabin32");
477   EXPECT_EQ(Triple::mips64, T.getArch());
478   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
479   EXPECT_EQ(Triple::Linux, T.getOS());
480   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
481   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
482   T = Triple("mipsn32r6");
483   EXPECT_EQ(Triple::mips64, T.getArch());
484   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
485   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
486   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
487 
488   T = Triple("mipsel-unknown-linux-gnu");
489   EXPECT_EQ(Triple::mipsel, T.getArch());
490   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
491   EXPECT_EQ(Triple::Linux, T.getOS());
492   EXPECT_EQ(Triple::GNU, T.getEnvironment());
493   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
494   T = Triple("mipsel");
495   EXPECT_EQ(Triple::mipsel, T.getArch());
496   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
497   EXPECT_EQ(Triple::GNU, T.getEnvironment());
498   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
499 
500   T = Triple("mips-unknown-linux-gnu");
501   EXPECT_EQ(Triple::mips, T.getArch());
502   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
503   EXPECT_EQ(Triple::Linux, T.getOS());
504   EXPECT_EQ(Triple::GNU, T.getEnvironment());
505   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
506   T = Triple("mips");
507   EXPECT_EQ(Triple::mips, T.getArch());
508   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
509   EXPECT_EQ(Triple::GNU, T.getEnvironment());
510   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
511 
512   T = Triple("mipsisa32r6el-unknown-linux-gnu");
513   EXPECT_EQ(Triple::mipsel, T.getArch());
514   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
515   EXPECT_EQ(Triple::Linux, T.getOS());
516   EXPECT_EQ(Triple::GNU, T.getEnvironment());
517   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
518   T = Triple("mipsr6el");
519   EXPECT_EQ(Triple::mipsel, T.getArch());
520   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
521   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
522   T = Triple("mipsisa32r6el");
523   EXPECT_EQ(Triple::mipsel, T.getArch());
524   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
525   EXPECT_EQ(Triple::GNU, T.getEnvironment());
526   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
527 
528   T = Triple("mipsisa32r6-unknown-linux-gnu");
529   EXPECT_EQ(Triple::mips, T.getArch());
530   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
531   EXPECT_EQ(Triple::Linux, T.getOS());
532   EXPECT_EQ(Triple::GNU, T.getEnvironment());
533   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
534   T = Triple("mipsr6");
535   EXPECT_EQ(Triple::mips, T.getArch());
536   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
537   EXPECT_EQ(Triple::GNU, T.getEnvironment());
538   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
539   T = Triple("mipsisa32r6");
540   EXPECT_EQ(Triple::mips, T.getArch());
541   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
542   EXPECT_EQ(Triple::GNU, T.getEnvironment());
543   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
544 
545   T = Triple("arm-oe-linux-gnueabi");
546   EXPECT_EQ(Triple::arm, T.getArch());
547   EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
548   EXPECT_EQ(Triple::Linux, T.getOS());
549   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
550 
551   T = Triple("aarch64-oe-linux");
552   EXPECT_EQ(Triple::aarch64, T.getArch());
553   EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
554   EXPECT_EQ(Triple::Linux, T.getOS());
555   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
556 
557   T = Triple("huh");
558   EXPECT_EQ(Triple::UnknownArch, T.getArch());
559 }
560 
Join(StringRef A,StringRef B,StringRef C)561 static std::string Join(StringRef A, StringRef B, StringRef C) {
562   std::string Str = A;
563   Str += '-';
564   Str += B;
565   Str += '-';
566   Str += C;
567   return Str;
568 }
569 
Join(StringRef A,StringRef B,StringRef C,StringRef D)570 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
571   std::string Str = A;
572   Str += '-';
573   Str += B;
574   Str += '-';
575   Str += C;
576   Str += '-';
577   Str += D;
578   return Str;
579 }
580 
TEST(TripleTest,Normalization)581 TEST(TripleTest, Normalization) {
582 
583   EXPECT_EQ("unknown", Triple::normalize(""));
584   EXPECT_EQ("unknown-unknown", Triple::normalize("-"));
585   EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--"));
586   EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---"));
587   EXPECT_EQ("unknown-unknown-unknown-unknown-unknown",
588             Triple::normalize("----"));
589 
590   EXPECT_EQ("a", Triple::normalize("a"));
591   EXPECT_EQ("a-b", Triple::normalize("a-b"));
592   EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
593   EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
594 
595   EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
596   EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
597   EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
598   EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
599 
600   EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
601   EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c"));
602   EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
603   EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
604 
605   EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
606   EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c"));
607   EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c"));
608 
609   EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
610   EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386"));
611   EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c"));
612   EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-"));
613 
614   EXPECT_EQ("i386", Triple::normalize("i386"));
615   EXPECT_EQ("unknown-pc", Triple::normalize("pc"));
616   EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux"));
617 
618   EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux"));
619 
620   // Check that normalizing a permutated set of valid components returns a
621   // triple with the unpermuted components.
622   //
623   // We don't check every possible combination. For the set of architectures A,
624   // vendors V, operating systems O, and environments E, that would require |A|
625   // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given
626   // slot and make sure it gets normalized to the correct position from every
627   // permutation. This should cover the core logic while being a tractable
628   // number of tests at (|A| + |V| + |O| + |E|) * 4!.
629   auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);
630   auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);
631   auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);
632   auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);
633   StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),
634                           Triple::getVendorTypeName(FirstVendorType),
635                           Triple::getOSTypeName(FirstOSType),
636                           Triple::getEnvironmentTypeName(FirstEnvType)};
637   for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {
638     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
639     C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
640     std::string E = Join(C[0], C[1], C[2]);
641     int I[] = {0, 1, 2};
642     do {
643       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
644     } while (std::next_permutation(std::begin(I), std::end(I)));
645     std::string F = Join(C[0], C[1], C[2], C[3]);
646     int J[] = {0, 1, 2, 3};
647     do {
648       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
649     } while (std::next_permutation(std::begin(J), std::end(J)));
650   }
651   for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;
652        ++Vendor) {
653     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
654     C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
655     std::string E = Join(C[0], C[1], C[2]);
656     int I[] = {0, 1, 2};
657     do {
658       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
659     } while (std::next_permutation(std::begin(I), std::end(I)));
660     std::string F = Join(C[0], C[1], C[2], C[3]);
661     int J[] = {0, 1, 2, 3};
662     do {
663       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
664     } while (std::next_permutation(std::begin(J), std::end(J)));
665   }
666   for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {
667     if (OS == Triple::Win32)
668       continue;
669     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
670     C[2] = Triple::getOSTypeName(Triple::OSType(OS));
671     std::string E = Join(C[0], C[1], C[2]);
672     int I[] = {0, 1, 2};
673     do {
674       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
675     } while (std::next_permutation(std::begin(I), std::end(I)));
676     std::string F = Join(C[0], C[1], C[2], C[3]);
677     int J[] = {0, 1, 2, 3};
678     do {
679       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
680     } while (std::next_permutation(std::begin(J), std::end(J)));
681   }
682   for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {
683     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
684     C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
685     std::string F = Join(C[0], C[1], C[2], C[3]);
686     int J[] = {0, 1, 2, 3};
687     do {
688       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
689     } while (std::next_permutation(std::begin(J), std::end(J)));
690   }
691 
692   // Various real-world funky triples.  The value returned by GCC's config.sub
693   // is given in the comment.
694   EXPECT_EQ("i386-unknown-windows-gnu",
695             Triple::normalize("i386-mingw32")); // i386-pc-mingw32
696   EXPECT_EQ("x86_64-unknown-linux-gnu",
697             Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
698   EXPECT_EQ("i486-unknown-linux-gnu",
699             Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
700   EXPECT_EQ("i386-redhat-linux",
701             Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
702   EXPECT_EQ("i686-unknown-linux",
703             Triple::normalize("i686-linux")); // i686-pc-linux-gnu
704   EXPECT_EQ("arm-none-unknown-eabi",
705             Triple::normalize("arm-none-eabi")); // arm-none-eabi
706 }
707 
TEST(TripleTest,MutateName)708 TEST(TripleTest, MutateName) {
709   Triple T;
710   EXPECT_EQ(Triple::UnknownArch, T.getArch());
711   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
712   EXPECT_EQ(Triple::UnknownOS, T.getOS());
713   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
714 
715   T.setArchName("i386");
716   EXPECT_EQ(Triple::x86, T.getArch());
717   EXPECT_EQ("i386--", T.getTriple());
718 
719   T.setVendorName("pc");
720   EXPECT_EQ(Triple::x86, T.getArch());
721   EXPECT_EQ(Triple::PC, T.getVendor());
722   EXPECT_EQ("i386-pc-", T.getTriple());
723 
724   T.setOSName("linux");
725   EXPECT_EQ(Triple::x86, T.getArch());
726   EXPECT_EQ(Triple::PC, T.getVendor());
727   EXPECT_EQ(Triple::Linux, T.getOS());
728   EXPECT_EQ("i386-pc-linux", T.getTriple());
729 
730   T.setEnvironmentName("gnu");
731   EXPECT_EQ(Triple::x86, T.getArch());
732   EXPECT_EQ(Triple::PC, T.getVendor());
733   EXPECT_EQ(Triple::Linux, T.getOS());
734   EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
735 
736   T.setOSName("freebsd");
737   EXPECT_EQ(Triple::x86, T.getArch());
738   EXPECT_EQ(Triple::PC, T.getVendor());
739   EXPECT_EQ(Triple::FreeBSD, T.getOS());
740   EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
741 
742   T.setOSAndEnvironmentName("darwin");
743   EXPECT_EQ(Triple::x86, T.getArch());
744   EXPECT_EQ(Triple::PC, T.getVendor());
745   EXPECT_EQ(Triple::Darwin, T.getOS());
746   EXPECT_EQ("i386-pc-darwin", T.getTriple());
747 }
748 
TEST(TripleTest,BitWidthPredicates)749 TEST(TripleTest, BitWidthPredicates) {
750   Triple T;
751   EXPECT_FALSE(T.isArch16Bit());
752   EXPECT_FALSE(T.isArch32Bit());
753   EXPECT_FALSE(T.isArch64Bit());
754 
755   T.setArch(Triple::arm);
756   EXPECT_FALSE(T.isArch16Bit());
757   EXPECT_TRUE(T.isArch32Bit());
758   EXPECT_FALSE(T.isArch64Bit());
759 
760   T.setArch(Triple::hexagon);
761   EXPECT_FALSE(T.isArch16Bit());
762   EXPECT_TRUE(T.isArch32Bit());
763   EXPECT_FALSE(T.isArch64Bit());
764 
765   T.setArch(Triple::mips);
766   EXPECT_FALSE(T.isArch16Bit());
767   EXPECT_TRUE(T.isArch32Bit());
768   EXPECT_FALSE(T.isArch64Bit());
769 
770   T.setArch(Triple::mips64);
771   EXPECT_FALSE(T.isArch16Bit());
772   EXPECT_FALSE(T.isArch32Bit());
773   EXPECT_TRUE(T.isArch64Bit());
774 
775   T.setArch(Triple::msp430);
776   EXPECT_TRUE(T.isArch16Bit());
777   EXPECT_FALSE(T.isArch32Bit());
778   EXPECT_FALSE(T.isArch64Bit());
779 
780   T.setArch(Triple::ppc);
781   EXPECT_FALSE(T.isArch16Bit());
782   EXPECT_TRUE(T.isArch32Bit());
783   EXPECT_FALSE(T.isArch64Bit());
784 
785   T.setArch(Triple::ppc64);
786   EXPECT_FALSE(T.isArch16Bit());
787   EXPECT_FALSE(T.isArch32Bit());
788   EXPECT_TRUE(T.isArch64Bit());
789 
790   T.setArch(Triple::x86);
791   EXPECT_FALSE(T.isArch16Bit());
792   EXPECT_TRUE(T.isArch32Bit());
793   EXPECT_FALSE(T.isArch64Bit());
794 
795   T.setArch(Triple::x86_64);
796   EXPECT_FALSE(T.isArch16Bit());
797   EXPECT_FALSE(T.isArch32Bit());
798   EXPECT_TRUE(T.isArch64Bit());
799 
800   T.setArch(Triple::amdil);
801   EXPECT_FALSE(T.isArch16Bit());
802   EXPECT_TRUE(T.isArch32Bit());
803   EXPECT_FALSE(T.isArch64Bit());
804 
805   T.setArch(Triple::amdil64);
806   EXPECT_FALSE(T.isArch16Bit());
807   EXPECT_FALSE(T.isArch32Bit());
808   EXPECT_TRUE(T.isArch64Bit());
809 
810   T.setArch(Triple::hsail);
811   EXPECT_FALSE(T.isArch16Bit());
812   EXPECT_TRUE(T.isArch32Bit());
813   EXPECT_FALSE(T.isArch64Bit());
814 
815   T.setArch(Triple::hsail64);
816   EXPECT_FALSE(T.isArch16Bit());
817   EXPECT_FALSE(T.isArch32Bit());
818   EXPECT_TRUE(T.isArch64Bit());
819 
820   T.setArch(Triple::spir);
821   EXPECT_FALSE(T.isArch16Bit());
822   EXPECT_TRUE(T.isArch32Bit());
823   EXPECT_FALSE(T.isArch64Bit());
824 
825   T.setArch(Triple::spir64);
826   EXPECT_FALSE(T.isArch16Bit());
827   EXPECT_FALSE(T.isArch32Bit());
828   EXPECT_TRUE(T.isArch64Bit());
829 
830   T.setArch(Triple::sparc);
831   EXPECT_FALSE(T.isArch16Bit());
832   EXPECT_TRUE(T.isArch32Bit());
833   EXPECT_FALSE(T.isArch64Bit());
834 
835   T.setArch(Triple::sparcel);
836   EXPECT_FALSE(T.isArch16Bit());
837   EXPECT_TRUE(T.isArch32Bit());
838   EXPECT_FALSE(T.isArch64Bit());
839 
840   T.setArch(Triple::sparcv9);
841   EXPECT_FALSE(T.isArch16Bit());
842   EXPECT_FALSE(T.isArch32Bit());
843   EXPECT_TRUE(T.isArch64Bit());
844 
845   T.setArch(Triple::wasm32);
846   EXPECT_FALSE(T.isArch16Bit());
847   EXPECT_TRUE(T.isArch32Bit());
848   EXPECT_FALSE(T.isArch64Bit());
849 
850   T.setArch(Triple::wasm64);
851   EXPECT_FALSE(T.isArch16Bit());
852   EXPECT_FALSE(T.isArch32Bit());
853   EXPECT_TRUE(T.isArch64Bit());
854 
855   T.setArch(Triple::avr);
856   EXPECT_TRUE(T.isArch16Bit());
857   EXPECT_FALSE(T.isArch32Bit());
858   EXPECT_FALSE(T.isArch64Bit());
859 
860   T.setArch(Triple::lanai);
861   EXPECT_FALSE(T.isArch16Bit());
862   EXPECT_TRUE(T.isArch32Bit());
863   EXPECT_FALSE(T.isArch64Bit());
864 
865   T.setArch(Triple::riscv32);
866   EXPECT_FALSE(T.isArch16Bit());
867   EXPECT_TRUE(T.isArch32Bit());
868   EXPECT_FALSE(T.isArch64Bit());
869 
870   T.setArch(Triple::riscv64);
871   EXPECT_FALSE(T.isArch16Bit());
872   EXPECT_FALSE(T.isArch32Bit());
873   EXPECT_TRUE(T.isArch64Bit());
874 }
875 
TEST(TripleTest,BitWidthArchVariants)876 TEST(TripleTest, BitWidthArchVariants) {
877   Triple T;
878   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
879   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
880 
881   T.setArch(Triple::UnknownArch);
882   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
883   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
884 
885   T.setArch(Triple::mips);
886   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
887   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
888 
889   T.setArch(Triple::mipsel);
890   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
891   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
892 
893   T.setArch(Triple::ppc);
894   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
895   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
896 
897   T.setArch(Triple::nvptx);
898   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
899   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
900 
901   T.setArch(Triple::sparc);
902   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
903   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
904 
905   T.setArch(Triple::x86);
906   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
907   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
908 
909   T.setArch(Triple::mips64);
910   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
911   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
912 
913   T.setArch(Triple::mips64el);
914   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
915   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
916 
917   T.setArch(Triple::ppc64);
918   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
919   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
920 
921   T.setArch(Triple::nvptx64);
922   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
923   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
924 
925   T.setArch(Triple::sparcv9);
926   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
927   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
928 
929   T.setArch(Triple::x86_64);
930   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
931   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
932 
933   T.setArch(Triple::amdil);
934   EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
935   EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
936 
937   T.setArch(Triple::amdil64);
938   EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
939   EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
940 
941   T.setArch(Triple::hsail);
942   EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
943   EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
944 
945   T.setArch(Triple::hsail64);
946   EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
947   EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
948 
949   T.setArch(Triple::spir);
950   EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
951   EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
952 
953   T.setArch(Triple::spir64);
954   EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
955   EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
956 
957   T.setArch(Triple::wasm32);
958   EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
959   EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
960 
961   T.setArch(Triple::wasm64);
962   EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
963   EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
964 
965   T.setArch(Triple::riscv32);
966   EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
967   EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
968 
969   T.setArch(Triple::riscv64);
970   EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
971   EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
972 
973   T.setArch(Triple::thumbeb);
974   EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch());
975   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
976 
977   T.setArch(Triple::thumb);
978   EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch());
979   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
980 
981   T.setArch(Triple::aarch64);
982   EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
983   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
984 
985   T.setArch(Triple::aarch64_be);
986   EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
987   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
988 
989   T.setArch(Triple::renderscript32);
990   EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
991   EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
992 
993   T.setArch(Triple::renderscript64);
994   EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
995   EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
996 
997   T.setArch(Triple::le32);
998   EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch());
999   EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch());
1000 
1001   T.setArch(Triple::le64);
1002   EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch());
1003   EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch());
1004 
1005   T.setArch(Triple::armeb);
1006   EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
1007   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
1008 
1009   T.setArch(Triple::arm);
1010   EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
1011   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
1012 
1013   T.setArch(Triple::systemz);
1014   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1015   EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch());
1016 
1017   T.setArch(Triple::xcore);
1018   EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch());
1019   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1020 }
1021 
TEST(TripleTest,EndianArchVariants)1022 TEST(TripleTest, EndianArchVariants) {
1023   Triple T;
1024   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1025   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1026 
1027   T.setArch(Triple::UnknownArch);
1028   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1029   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1030 
1031   T.setArch(Triple::aarch64_be);
1032   EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
1033   EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
1034 
1035   T.setArch(Triple::aarch64);
1036   EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
1037   EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
1038 
1039   T.setArch(Triple::armeb);
1040   EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());
1041   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1042 
1043   T.setArch(Triple::arm);
1044   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1045   EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());
1046   T = Triple("arm");
1047   EXPECT_TRUE(T.isLittleEndian());
1048   T = Triple("thumb");
1049   EXPECT_TRUE(T.isLittleEndian());
1050   T = Triple("armeb");
1051   EXPECT_FALSE(T.isLittleEndian());
1052   T = Triple("thumbeb");
1053   EXPECT_FALSE(T.isLittleEndian());
1054 
1055   T.setArch(Triple::bpfeb);
1056   EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
1057   EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
1058 
1059   T.setArch(Triple::bpfel);
1060   EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
1061   EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
1062 
1063   T.setArch(Triple::mips64);
1064   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
1065   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
1066 
1067   T.setArch(Triple::mips64el);
1068   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
1069   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
1070 
1071   T.setArch(Triple::mips);
1072   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
1073   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
1074 
1075   T.setArch(Triple::mipsel);
1076   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
1077   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
1078 
1079   T.setArch(Triple::ppc);
1080   EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());
1081   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1082 
1083   T.setArch(Triple::ppc64);
1084   EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
1085   EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
1086 
1087   T.setArch(Triple::ppc64le);
1088   EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
1089   EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
1090 
1091   T.setArch(Triple::sparc);
1092   EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
1093   EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
1094 
1095   T.setArch(Triple::sparcel);
1096   EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
1097   EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
1098 
1099   T.setArch(Triple::thumb);
1100   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1101   EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());
1102 
1103   T.setArch(Triple::thumbeb);
1104   EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());
1105   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1106 
1107   T.setArch(Triple::lanai);
1108   EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());
1109   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1110 
1111   T.setArch(Triple::tcele);
1112   EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
1113   EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
1114 
1115   T.setArch(Triple::tce);
1116   EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
1117   EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
1118 
1119   T.setArch(Triple::le32);
1120   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1121   EXPECT_EQ(Triple::le32, T.getLittleEndianArchVariant().getArch());
1122 
1123   T.setArch(Triple::le64);
1124   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1125   EXPECT_EQ(Triple::le64, T.getLittleEndianArchVariant().getArch());
1126 }
1127 
TEST(TripleTest,getOSVersion)1128 TEST(TripleTest, getOSVersion) {
1129   Triple T;
1130   unsigned Major, Minor, Micro;
1131 
1132   T = Triple("i386-apple-darwin9");
1133   EXPECT_TRUE(T.isMacOSX());
1134   EXPECT_FALSE(T.isiOS());
1135   EXPECT_FALSE(T.isArch16Bit());
1136   EXPECT_TRUE(T.isArch32Bit());
1137   EXPECT_FALSE(T.isArch64Bit());
1138   T.getMacOSXVersion(Major, Minor, Micro);
1139   EXPECT_EQ((unsigned)10, Major);
1140   EXPECT_EQ((unsigned)5, Minor);
1141   EXPECT_EQ((unsigned)0, Micro);
1142   T.getiOSVersion(Major, Minor, Micro);
1143   EXPECT_EQ((unsigned)5, Major);
1144   EXPECT_EQ((unsigned)0, Minor);
1145   EXPECT_EQ((unsigned)0, Micro);
1146 
1147   T = Triple("x86_64-apple-darwin9");
1148   EXPECT_TRUE(T.isMacOSX());
1149   EXPECT_FALSE(T.isiOS());
1150   EXPECT_FALSE(T.isArch16Bit());
1151   EXPECT_FALSE(T.isArch32Bit());
1152   EXPECT_TRUE(T.isArch64Bit());
1153   T.getMacOSXVersion(Major, Minor, Micro);
1154   EXPECT_EQ((unsigned)10, Major);
1155   EXPECT_EQ((unsigned)5, Minor);
1156   EXPECT_EQ((unsigned)0, Micro);
1157   T.getiOSVersion(Major, Minor, Micro);
1158   EXPECT_EQ((unsigned)5, Major);
1159   EXPECT_EQ((unsigned)0, Minor);
1160   EXPECT_EQ((unsigned)0, Micro);
1161 
1162   T = Triple("x86_64-apple-macosx");
1163   EXPECT_TRUE(T.isMacOSX());
1164   EXPECT_FALSE(T.isiOS());
1165   EXPECT_FALSE(T.isArch16Bit());
1166   EXPECT_FALSE(T.isArch32Bit());
1167   EXPECT_TRUE(T.isArch64Bit());
1168   T.getMacOSXVersion(Major, Minor, Micro);
1169   EXPECT_EQ((unsigned)10, Major);
1170   EXPECT_EQ((unsigned)4, Minor);
1171   EXPECT_EQ((unsigned)0, Micro);
1172   T.getiOSVersion(Major, Minor, Micro);
1173   EXPECT_EQ((unsigned)5, Major);
1174   EXPECT_EQ((unsigned)0, Minor);
1175   EXPECT_EQ((unsigned)0, Micro);
1176 
1177   T = Triple("x86_64-apple-macosx10.7");
1178   EXPECT_TRUE(T.isMacOSX());
1179   EXPECT_FALSE(T.isiOS());
1180   EXPECT_FALSE(T.isArch16Bit());
1181   EXPECT_FALSE(T.isArch32Bit());
1182   EXPECT_TRUE(T.isArch64Bit());
1183   T.getMacOSXVersion(Major, Minor, Micro);
1184   EXPECT_EQ((unsigned)10, Major);
1185   EXPECT_EQ((unsigned)7, Minor);
1186   EXPECT_EQ((unsigned)0, Micro);
1187   T.getiOSVersion(Major, Minor, Micro);
1188   EXPECT_EQ((unsigned)5, Major);
1189   EXPECT_EQ((unsigned)0, Minor);
1190   EXPECT_EQ((unsigned)0, Micro);
1191 
1192   T = Triple("armv7-apple-ios");
1193   EXPECT_FALSE(T.isMacOSX());
1194   EXPECT_TRUE(T.isiOS());
1195   EXPECT_FALSE(T.isArch16Bit());
1196   EXPECT_TRUE(T.isArch32Bit());
1197   EXPECT_FALSE(T.isArch64Bit());
1198   T.getMacOSXVersion(Major, Minor, Micro);
1199   EXPECT_EQ((unsigned)10, Major);
1200   EXPECT_EQ((unsigned)4, Minor);
1201   EXPECT_EQ((unsigned)0, Micro);
1202   T.getiOSVersion(Major, Minor, Micro);
1203   EXPECT_EQ((unsigned)5, Major);
1204   EXPECT_EQ((unsigned)0, Minor);
1205   EXPECT_EQ((unsigned)0, Micro);
1206 
1207   T = Triple("armv7-apple-ios7.0");
1208   EXPECT_FALSE(T.isMacOSX());
1209   EXPECT_TRUE(T.isiOS());
1210   EXPECT_FALSE(T.isArch16Bit());
1211   EXPECT_TRUE(T.isArch32Bit());
1212   EXPECT_FALSE(T.isArch64Bit());
1213   T.getMacOSXVersion(Major, Minor, Micro);
1214   EXPECT_EQ((unsigned)10, Major);
1215   EXPECT_EQ((unsigned)4, Minor);
1216   EXPECT_EQ((unsigned)0, Micro);
1217   T.getiOSVersion(Major, Minor, Micro);
1218   EXPECT_EQ((unsigned)7, Major);
1219   EXPECT_EQ((unsigned)0, Minor);
1220   EXPECT_EQ((unsigned)0, Micro);
1221   EXPECT_FALSE(T.isSimulatorEnvironment());
1222 
1223   T = Triple("x86_64-apple-ios10.3-simulator");
1224   EXPECT_TRUE(T.isiOS());
1225   T.getiOSVersion(Major, Minor, Micro);
1226   EXPECT_EQ((unsigned)10, Major);
1227   EXPECT_EQ((unsigned)3, Minor);
1228   EXPECT_EQ((unsigned)0, Micro);
1229   EXPECT_TRUE(T.isSimulatorEnvironment());
1230 }
1231 
TEST(TripleTest,FileFormat)1232 TEST(TripleTest, FileFormat) {
1233   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
1234   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
1235   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
1236   EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
1237   EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
1238 
1239   EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
1240   EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
1241   EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
1242 
1243   EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
1244 
1245   EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
1246   EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
1247 
1248   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
1249   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
1250   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi-musl").getObjectFormat());
1251   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi-musl").getObjectFormat());
1252 
1253   EXPECT_EQ(Triple::Wasm,
1254             Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
1255   EXPECT_EQ(Triple::Wasm,
1256             Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
1257   EXPECT_EQ(Triple::Wasm,
1258             Triple("wasm32-unknown-wasi-musl-wasm").getObjectFormat());
1259   EXPECT_EQ(Triple::Wasm,
1260             Triple("wasm64-unknown-wasi-musl-wasm").getObjectFormat());
1261 
1262   Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
1263   EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
1264 
1265   Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
1266   EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
1267 
1268   Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
1269   EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
1270 
1271   Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
1272   EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
1273 
1274   Triple T = Triple("");
1275   T.setObjectFormat(Triple::ELF);
1276   EXPECT_EQ(Triple::ELF, T.getObjectFormat());
1277 
1278   T.setObjectFormat(Triple::MachO);
1279   EXPECT_EQ(Triple::MachO, T.getObjectFormat());
1280 }
1281 
TEST(TripleTest,NormalizeWindows)1282 TEST(TripleTest, NormalizeWindows) {
1283   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
1284   EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32"));
1285   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
1286   EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32"));
1287   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
1288   EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64"));
1289   EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
1290   EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin"));
1291 
1292   EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
1293   EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32"));
1294   EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
1295   EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32"));
1296   EXPECT_EQ("x86_64-pc-windows-gnu",
1297             Triple::normalize("x86_64-pc-mingw32-w64"));
1298   EXPECT_EQ("x86_64-unknown-windows-gnu",
1299             Triple::normalize("x86_64-mingw32-w64"));
1300 
1301   EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
1302   EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf"));
1303   EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
1304   EXPECT_EQ("i686-unknown-windows-macho",
1305             Triple::normalize("i686-win32-macho"));
1306 
1307   EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
1308   EXPECT_EQ("x86_64-unknown-windows-elf",
1309             Triple::normalize("x86_64-win32-elf"));
1310   EXPECT_EQ("x86_64-pc-windows-macho",
1311             Triple::normalize("x86_64-pc-win32-macho"));
1312   EXPECT_EQ("x86_64-unknown-windows-macho",
1313             Triple::normalize("x86_64-win32-macho"));
1314 
1315   EXPECT_EQ("i686-pc-windows-cygnus",
1316             Triple::normalize("i686-pc-windows-cygnus"));
1317   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
1318   EXPECT_EQ("i686-pc-windows-itanium",
1319             Triple::normalize("i686-pc-windows-itanium"));
1320   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
1321 
1322   EXPECT_EQ("i686-pc-windows-elf",
1323             Triple::normalize("i686-pc-windows-elf-elf"));
1324 }
1325 
TEST(TripleTest,getARMCPUForArch)1326 TEST(TripleTest, getARMCPUForArch) {
1327   // Platform specific defaults.
1328   {
1329     llvm::Triple Triple("arm--nacl");
1330     EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
1331   }
1332   {
1333     llvm::Triple Triple("arm--openbsd");
1334     EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
1335   }
1336   {
1337     llvm::Triple Triple("armv6-unknown-freebsd");
1338     EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1339   }
1340   {
1341     llvm::Triple Triple("thumbv6-unknown-freebsd");
1342     EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1343   }
1344   {
1345     llvm::Triple Triple("armebv6-unknown-freebsd");
1346     EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1347   }
1348   {
1349     llvm::Triple Triple("arm--win32");
1350     EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch());
1351   }
1352   // Some alternative architectures
1353   {
1354     llvm::Triple Triple("armv7k-apple-ios9");
1355     EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1356   }
1357   {
1358     llvm::Triple Triple("armv7k-apple-watchos3");
1359     EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1360   }
1361   {
1362     llvm::Triple Triple("armv7k-apple-tvos9");
1363     EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1364   }
1365   // armeb is permitted, but armebeb is not
1366   {
1367     llvm::Triple Triple("armeb-none-eabi");
1368     EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch());
1369   }
1370   {
1371     llvm::Triple Triple("armebeb-none-eabi");
1372     EXPECT_EQ("", Triple.getARMCPUForArch());
1373   }
1374   {
1375     llvm::Triple Triple("armebv6eb-none-eabi");
1376     EXPECT_EQ("", Triple.getARMCPUForArch());
1377   }
1378   // xscaleeb is permitted, but armebxscale is not
1379   {
1380     llvm::Triple Triple("xscaleeb-none-eabi");
1381     EXPECT_EQ("xscale", Triple.getARMCPUForArch());
1382   }
1383   {
1384     llvm::Triple Triple("armebxscale-none-eabi");
1385     EXPECT_EQ("", Triple.getARMCPUForArch());
1386   }
1387 }
1388 
TEST(TripleTest,NormalizeARM)1389 TEST(TripleTest, NormalizeARM) {
1390   EXPECT_EQ("armv6-unknown-netbsd-eabi",
1391             Triple::normalize("armv6-netbsd-eabi"));
1392   EXPECT_EQ("armv7-unknown-netbsd-eabi",
1393             Triple::normalize("armv7-netbsd-eabi"));
1394   EXPECT_EQ("armv6eb-unknown-netbsd-eabi",
1395             Triple::normalize("armv6eb-netbsd-eabi"));
1396   EXPECT_EQ("armv7eb-unknown-netbsd-eabi",
1397             Triple::normalize("armv7eb-netbsd-eabi"));
1398   EXPECT_EQ("armv6-unknown-netbsd-eabihf",
1399             Triple::normalize("armv6-netbsd-eabihf"));
1400   EXPECT_EQ("armv7-unknown-netbsd-eabihf",
1401             Triple::normalize("armv7-netbsd-eabihf"));
1402   EXPECT_EQ("armv6eb-unknown-netbsd-eabihf",
1403             Triple::normalize("armv6eb-netbsd-eabihf"));
1404   EXPECT_EQ("armv7eb-unknown-netbsd-eabihf",
1405             Triple::normalize("armv7eb-netbsd-eabihf"));
1406 
1407   EXPECT_EQ("armv7-suse-linux-gnueabihf",
1408             Triple::normalize("armv7-suse-linux-gnueabi"));
1409 
1410   Triple T;
1411   T = Triple("armv6--netbsd-eabi");
1412   EXPECT_EQ(Triple::arm, T.getArch());
1413   T = Triple("armv6eb--netbsd-eabi");
1414   EXPECT_EQ(Triple::armeb, T.getArch());
1415   T = Triple("armv7-suse-linux-gnueabihf");
1416   EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
1417 }
1418 
TEST(TripleTest,ParseARMArch)1419 TEST(TripleTest, ParseARMArch) {
1420   // ARM
1421   {
1422     Triple T = Triple("arm");
1423     EXPECT_EQ(Triple::arm, T.getArch());
1424   }
1425   {
1426     Triple T = Triple("armeb");
1427     EXPECT_EQ(Triple::armeb, T.getArch());
1428   }
1429   // THUMB
1430   {
1431     Triple T = Triple("thumb");
1432     EXPECT_EQ(Triple::thumb, T.getArch());
1433   }
1434   {
1435     Triple T = Triple("thumbeb");
1436     EXPECT_EQ(Triple::thumbeb, T.getArch());
1437   }
1438   // AARCH64
1439   {
1440     Triple T = Triple("arm64");
1441     EXPECT_EQ(Triple::aarch64, T.getArch());
1442   }
1443   {
1444     Triple T = Triple("aarch64");
1445     EXPECT_EQ(Triple::aarch64, T.getArch());
1446   }
1447   {
1448     Triple T = Triple("aarch64_be");
1449     EXPECT_EQ(Triple::aarch64_be, T.getArch());
1450   }
1451 }
1452 } // end anonymous namespace
1453