if (Components.size() > 3)
Environment = parseEnvironment(Components[3]);
ObjectFormatType ObjectFormat = UnknownObjectFormat;
+ if (Components.size() > 4)
+ ObjectFormat = parseFormat(Components[4]);
// Note which components are already in their final position. These will not
// be moved.
if (OS == Triple::Win32) {
Components.resize(4);
Components[2] = "windows";
- if (Environment == UnknownEnvironment && ObjectFormat == UnknownObjectFormat)
- Components[3] = "msvc";
+ if (Environment == UnknownEnvironment) {
+ if (ObjectFormat == UnknownObjectFormat)
+ Components[3] = "msvc";
+ else
+ Components[3] = getObjectFormatTypeName(ObjectFormat);
+ } else if (ObjectFormat != UnknownObjectFormat &&
+ ObjectFormat != Triple::COFF) {
+ Components.resize(5);
+ Components[4] = getObjectFormatTypeName(ObjectFormat);
+ }
} else if (OS == Triple::MinGW32) {
Components.resize(4);
Components[2] = "windows";
EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
+ EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
+
+ {
+ Triple Normalized(Triple::normalize("i686-pc-windows-msvc-elf"));
+ EXPECT_EQ(Triple::ELF, Normalized.getObjectFormat());
+ }
+
Triple T = Triple("");
T.setObjectFormat(Triple::ELF);
EXPECT_EQ(Triple::ELF, T.getObjectFormat());
EXPECT_EQ("x86_64--windows-macho", Triple::normalize("x86_64-win32-macho"));
EXPECT_EQ("i686-pc-windows-itanium", Triple::normalize("i686-pc-windows-itanium"));
+
+ EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
}
}