Skip to content

Commit

Permalink
[RISCV] Make parseNormalizedArchString only accept [a-z0-9_]. (#90815)
Browse files Browse the repository at this point in the history
Previously we only rejected upper case characters. We should instead
reject anything except lower case, numbers, and underscore. Other
characters will likely confuse the extension sorting.
  • Loading branch information
topperc authored May 2, 2024
1 parent eb82363 commit 941eab1
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
6 changes: 4 additions & 2 deletions llvm/lib/TargetParser/RISCVISAInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
11 changes: 6 additions & 5 deletions llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_]");
}
}

Expand All @@ -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");
Expand Down

0 comments on commit 941eab1

Please sign in to comment.