diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/TargetParser/RISCVISAInfo.cpp | 6 | ||||
-rw-r--r-- | llvm/unittests/TargetParser/RISCVISAInfoTest.cpp | 11 |
2 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/TargetParser/RISCVISAInfo.cpp b/llvm/lib/TargetParser/RISCVISAInfo.cpp index 42a6674..e4ff4bc 100644 --- a/llvm/lib/TargetParser/RISCVISAInfo.cpp +++ b/llvm/lib/TargetParser/RISCVISAInfo.cpp @@ -429,9 +429,11 @@ RISCVISAInfo::parseFeatures(unsigned XLen, llvm::Expected<std::unique_ptr<RISCVISAInfo>> RISCVISAInfo::parseNormalizedArchString(StringRef Arch) { - if (llvm::any_of(Arch, isupper)) + // RISC-V ISA strings must be [a-z0-9_] + if (!llvm::all_of( + Arch, [](char C) { return isDigit(C) || isLower(C) || C == '_'; })) return createStringError(errc::invalid_argument, - "string must be lowercase"); + "string may only contain [a-z0-9_]"); // Must start with a valid base ISA name. unsigned XLen = 0; diff --git a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp index 82c8ee7..facaa75 100644 --- a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp +++ b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp @@ -20,11 +20,12 @@ bool operator==(const RISCVISAUtils::ExtensionVersion &A, return A.Major == B.Major && A.Minor == B.Minor; } -TEST(ParseNormalizedArchString, RejectsUpperCase) { - for (StringRef Input : {"RV32", "rV64", "rv32i2P0", "rv64i2p0_A2p0"}) { +TEST(ParseNormalizedArchString, RejectsInvalidChars) { + for (StringRef Input : + {"RV32", "rV64", "rv32i2P0", "rv64i2p0_A2p0", "rv32e2.0"}) { EXPECT_EQ( toString(RISCVISAInfo::parseNormalizedArchString(Input).takeError()), - "string must be lowercase"); + "string may only contain [a-z0-9_]"); } } @@ -37,8 +38,8 @@ TEST(ParseNormalizedArchString, RejectsInvalidBaseISA) { } TEST(ParseNormalizedArchString, RejectsMalformedInputs) { - for (StringRef Input : {"rv64i2p0_", "rv32i2p0__a2p0", "rv32e2.0", "rv64e2p", - "rv32i", "rv64ip1"}) { + for (StringRef Input : + {"rv64i2p0_", "rv32i2p0__a2p0", "rv64e2p", "rv32i", "rv64ip1"}) { EXPECT_EQ( toString(RISCVISAInfo::parseNormalizedArchString(Input).takeError()), "extension lacks version in expected format"); |