diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h --- a/llvm/include/llvm/ADT/Triple.h +++ b/llvm/include/llvm/ADT/Triple.h @@ -159,6 +159,7 @@ Mesa, SUSE, OpenEmbedded, + RedHat, LastVendorType = OpenEmbedded }; enum OSType { @@ -531,7 +532,8 @@ EnvironmentType Env = getEnvironment(); return Env == Triple::GNU || Env == Triple::GNUABIN32 || Env == Triple::GNUABI64 || Env == Triple::GNUEABI || - Env == Triple::GNUEABIHF || Env == Triple::GNUX32; + Env == Triple::GNUEABIHF || Env == Triple::GNUX32 || + (getVendor() == Triple::RedHat && Env == Triple::UnknownEnvironment); } bool isOSContiki() const { diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -179,6 +179,7 @@ case PC: return "pc"; case SCEI: return "scei"; case SUSE: return "suse"; + case RedHat: return "redhat"; } llvm_unreachable("Invalid VendorType!"); @@ -497,6 +498,7 @@ .Case("mesa", Triple::Mesa) .Case("suse", Triple::SUSE) .Case("oe", Triple::OpenEmbedded) + .Case("redhat", Triple::RedHat) .Default(Triple::UnknownVendor); } diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp --- a/llvm/unittests/ADT/TripleTest.cpp +++ b/llvm/unittests/ADT/TripleTest.cpp @@ -128,6 +128,12 @@ EXPECT_EQ(Triple::SCEI, T.getVendor()); EXPECT_EQ(Triple::PS4, T.getOS()); + T = Triple("x86_64-redhat-linux"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::RedHat, T.getVendor()); + EXPECT_EQ(Triple::Linux, T.getOS()); + EXPECT_EQ(true, T.isGNUEnvironment()); + T = Triple("powerpc-ibm-aix"); EXPECT_EQ(Triple::ppc, T.getArch()); EXPECT_EQ(Triple::IBM, T.getVendor());