Skip to content

Commit 6f02120

Browse files
[llvm][RISCV] Improve error message for invalid extension letters (#90468)
Previously you got: clang: error: invalid arch name 'rv64v', first letter should be 'e', 'i' or 'g' Which to me, unfamiliar with riscv, reads as if I should have used "[eig]rv64v". Which is not what clang means. Include the first bit in the error message to make this clearer: clang: error: invalid arch name 'rv64v', first letter after 'rv64' should be 'e', 'i' or 'g'
1 parent 11f4f45 commit 6f02120

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

clang/test/Driver/riscv-arch.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@
209209
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32q -### %s \
210210
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-LETTER %s
211211
// RV32-LETTER: error: invalid arch name 'rv32q',
212-
// RV32-LETTER: first letter should be 'e', 'i' or 'g'
212+
// RV32-LETTER: first letter after 'rv32' should be 'e', 'i' or 'g'
213213

214214
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32imcq -### %s \
215215
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-ORDER %s
@@ -239,12 +239,12 @@
239239
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32xabc -### %s \
240240
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X %s
241241
// RV32X: error: invalid arch name 'rv32xabc',
242-
// RV32X: first letter should be 'e', 'i' or 'g'
242+
// RV32X: first letter after 'rv32' should be 'e', 'i' or 'g'
243243

244244
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32sabc -### %s \
245245
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32S %s
246246
// RV32S: error: invalid arch name 'rv32sabc',
247-
// RV32S: first letter should be 'e', 'i' or 'g'
247+
// RV32S: first letter after 'rv32' should be 'e', 'i' or 'g'
248248

249249
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32ix -### %s \
250250
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X-NAME %s

llvm/lib/TargetParser/RISCVISAInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,8 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
639639
switch (Baseline) {
640640
default:
641641
return createStringError(errc::invalid_argument,
642-
"first letter should be 'e', 'i' or 'g'");
642+
"first letter after \'" + Arch.slice(0, 4) +
643+
"\' should be 'e', 'i' or 'g'");
643644
case 'e':
644645
case 'i':
645646
break;

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,14 @@ TEST(ParseArchString, RejectsInvalidBaseISA) {
120120
EXPECT_EQ(toString(RISCVISAInfo::parseArchString(Input, true).takeError()),
121121
"string must begin with rv32{i,e,g} or rv64{i,e,g}");
122122
}
123-
for (StringRef Input : {"rv32j", "rv64k", "rv32_i"}) {
123+
124+
for (StringRef Input : {"rv32j", "rv32_i"}) {
124125
EXPECT_EQ(toString(RISCVISAInfo::parseArchString(Input, true).takeError()),
125-
"first letter should be 'e', 'i' or 'g'");
126+
"first letter after 'rv32' should be 'e', 'i' or 'g'");
126127
}
128+
129+
EXPECT_EQ(toString(RISCVISAInfo::parseArchString("rv64k", true).takeError()),
130+
"first letter after 'rv64' should be 'e', 'i' or 'g'");
127131
}
128132

129133
TEST(ParseArchString, RejectsUnsupportedBaseISA) {
@@ -395,7 +399,7 @@ TEST(ParseArchString, AcceptsAmbiguousFromRelaxExtensions) {
395399
TEST(ParseArchString, RejectsRelaxExtensionsNotStartWithEorIorG) {
396400
EXPECT_EQ(
397401
toString(RISCVISAInfo::parseArchString("rv32zba_im", true).takeError()),
398-
"first letter should be 'e', 'i' or 'g'");
402+
"first letter after 'rv32' should be 'e', 'i' or 'g'");
399403
}
400404

401405
TEST(ParseArchString,

0 commit comments

Comments
 (0)