[llvm] cb743dd - [RISCV] Consistently error for arch strings with trailing _

Alex Bradbury via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 14 12:13:12 PDT 2023


Author: Alex Bradbury
Date: 2023-03-14T19:12:07Z
New Revision: cb743dd8371597f75fac62b8b854e068d215373a

URL: https://github.com/llvm/llvm-project/commit/cb743dd8371597f75fac62b8b854e068d215373a
DIFF: https://github.com/llvm/llvm-project/commit/cb743dd8371597f75fac62b8b854e068d215373a.diff

LOG: [RISCV] Consistently error for arch strings with trailing _

RISCVISAInfo::parseArchString would sometimes error for arch strings
with a trailing _ and sometimes accept them. This patch makes it
consistently error.

Differential Revision: https://reviews.llvm.org/D145949

Added: 
    

Modified: 
    llvm/lib/Support/RISCVISAInfo.cpp
    llvm/unittests/Support/RISCVISAInfoTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/RISCVISAInfo.cpp b/llvm/lib/Support/RISCVISAInfo.cpp
index 520dff68c3f3c..5396aa21be613 100644
--- a/llvm/lib/Support/RISCVISAInfo.cpp
+++ b/llvm/lib/Support/RISCVISAInfo.cpp
@@ -629,6 +629,10 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
     break;
   }
 
+  if (Arch.back() == '_')
+    return createStringError(errc::invalid_argument,
+                             "extension name missing after separator '_'");
+
   // Skip rvxxx
   StringRef Exts = Arch.substr(5);
 

diff  --git a/llvm/unittests/Support/RISCVISAInfoTest.cpp b/llvm/unittests/Support/RISCVISAInfoTest.cpp
index ce1db1933ee60..16b6c9e685984 100644
--- a/llvm/unittests/Support/RISCVISAInfoTest.cpp
+++ b/llvm/unittests/Support/RISCVISAInfoTest.cpp
@@ -317,16 +317,12 @@ TEST(ParseArchString, RejectsDoubleOrTrailingUnderscore) {
   EXPECT_EQ(
       toString(RISCVISAInfo::parseArchString("rv64i__m", true).takeError()),
       "invalid standard user-level extension '_'");
-  EXPECT_EQ(
-      toString(RISCVISAInfo::parseArchString("rv32ezicsr_", true).takeError()),
-      "extension name missing after separator '_'");
-
-  // FIXME: Trailing underscores after single letter extensions are accepted,
-  // which is inconsistent.
-  ASSERT_THAT_EXPECTED(RISCVISAInfo::parseArchString("rv32i_", true),
-                       Succeeded());
-  ASSERT_THAT_EXPECTED(RISCVISAInfo::parseArchString("rv64im_", true),
-                       Succeeded());
+
+  for (StringRef Input :
+       {"rv32ezicsr__zifencei", "rv32i_", "rv32izicsr_", "rv64im_"}) {
+    EXPECT_EQ(toString(RISCVISAInfo::parseArchString(Input, true).takeError()),
+              "extension name missing after separator '_'");
+  }
 }
 
 TEST(ParseArchString, RejectsDuplicateExtensionNames) {


        


More information about the llvm-commits mailing list