diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 3a1a962003abf..aa82a312a0ca2 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -270,6 +270,8 @@ class Triple { MuslX32, LLVM, + CheriPureCap, + MSVC, Itanium, Cygnus, diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index faabaf18d8071..013b8ae072474 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -362,6 +362,8 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) { return "pauthtest"; case LLVM: return "llvm"; + case CheriPureCap: + return "purecap"; } llvm_unreachable("Invalid EnvironmentType!"); @@ -743,6 +745,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) { .StartsWith("ohos", Triple::OpenHOS) .StartsWith("pauthtest", Triple::PAuthTest) .StartsWith("llvm", Triple::LLVM) + .StartsWith("purecap", Triple::CheriPureCap) .Default(Triple::UnknownEnvironment); } diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp index 87f9083fa344c..10fff4e2a96d8 100644 --- a/llvm/unittests/TargetParser/TripleTest.cpp +++ b/llvm/unittests/TargetParser/TripleTest.cpp @@ -1347,6 +1347,12 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::Linux, T.getOS()); EXPECT_EQ(Triple::LLVM, T.getEnvironment()); + T = Triple("riscv64-unknown-linux-purecap"); + EXPECT_EQ(Triple::riscv64, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::Linux, T.getOS()); + EXPECT_EQ(Triple::CheriPureCap, T.getEnvironment()); + T = Triple("huh"); EXPECT_EQ(Triple::UnknownArch, T.getArch()); }