Skip to content

Commit 5445a35

Browse files
authored
[RISCV] Detect empty extension name after parsing MajorVersion in parseNormalizedArchString. (#90790)
If the string is just a version, we will end up adding an empty string as an extension which crashes in the compare function for the std::map.
1 parent 1aeb64c commit 5445a35

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

llvm/lib/TargetParser/RISCVISAInfo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ RISCVISAInfo::parseNormalizedArchString(StringRef Arch) {
476476
return createStringError(errc::invalid_argument,
477477
"extension lacks version in expected format");
478478

479+
if (VersionStart == 0)
480+
return createStringError(errc::invalid_argument,
481+
"missing extension name");
482+
479483
StringRef ExtName = Prefix.slice(0, VersionStart);
480484
StringRef MajorVersionStr = Prefix.slice(VersionStart, StringRef::npos);
481485
if (MajorVersionStr.getAsInteger(10, MajorVersion))

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ TEST(ParseNormalizedArchString, RejectsMalformedInputs) {
4646
}
4747
}
4848

49+
TEST(ParseNormalizedArchString, OnlyVersion) {
50+
for (StringRef Input : {"rv64i2p0_1p0", "rv32i2p0_1p0"}) {
51+
EXPECT_EQ(
52+
toString(RISCVISAInfo::parseNormalizedArchString(Input).takeError()),
53+
"missing extension name");
54+
}
55+
}
56+
4957
TEST(ParseNormalizedArchString, AcceptsValidBaseISAsAndSetsXLen) {
5058
auto MaybeRV32I = RISCVISAInfo::parseNormalizedArchString("rv32i2p0");
5159
ASSERT_THAT_EXPECTED(MaybeRV32I, Succeeded());

0 commit comments

Comments
 (0)