[PATCH] D153722: [LLParser] Friendly error out if a non global value's name exceeds max name size

Han Yulong via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 25 08:26:37 PDT 2023


wheatfox created this revision.
wheatfox added reviewers: nikic, tejohnson.
wheatfox added a project: LLVM.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
wheatfox requested review of this revision.
Herald added a subscriber: llvm-commits.
wheatfox updated this revision to Diff 534337.
wheatfox added a comment.

update `llvm\test\Assembler\non-global-value-max-name-size.ll` and add `llvm-as` test


The previous implementation of LLParser.cpp will error out 
`multiple definition of local value` when `%var = ...` exceeds max length(when set to 2). However, the real error is name size exceeding. Therefore, I added some code to correctly error out that reason instead of "multiple definition".


https://reviews.llvm.org/D153722

Files:
  llvm/lib/AsmParser/LLParser.cpp
  llvm/test/Assembler/non-global-value-max-name-size.ll


Index: llvm/test/Assembler/non-global-value-max-name-size.ll
===================================================================
--- llvm/test/Assembler/non-global-value-max-name-size.ll
+++ llvm/test/Assembler/non-global-value-max-name-size.ll
@@ -1,10 +1,12 @@
 ; RUN: opt < %s -S -non-global-value-max-name-size=5
+; RUN: llvm-as %s -non-global-value-max-name-size=5
 ; RUN: not opt < %s -S -non-global-value-max-name-size=4 2>&1 | FileCheck %s
 
 ; CHECK: name is too long
 
 define void @f() {
 bb0:
+  %var.1 = alloca i32, align 4
   br label %testz
 
 testz:
Index: llvm/lib/AsmParser/LLParser.cpp
===================================================================
--- llvm/lib/AsmParser/LLParser.cpp
+++ llvm/lib/AsmParser/LLParser.cpp
@@ -3439,9 +3439,23 @@
   // Set the name on the instruction.
   Inst->setName(NameStr);
 
-  if (Inst->getName() != NameStr)
+  if (Inst->getName() != NameStr) {
+
+    size_t InstNameSize = Inst->getName().size();
+    size_t NameStrSize = NameStr.size();
+
+    if (InstNameSize != NameStrSize + 1) {
+      // The name is too long and was trimmed when stored in SmallString with
+      // NonGlobalValueMaxNameSize
+      return P.error(NameLoc, "name length exceeds non global max name size, "
+                              "consider making the name shorter or "
+                              "increasing -non-global-value-max-name-size: '" +
+                                  NameStr + "'");
+    }
+
     return P.error(NameLoc, "multiple definition of local value named '" +
                                 NameStr + "'");
+  }
   return false;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153722.534337.patch
Type: text/x-patch
Size: 1607 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230625/697a514f/attachment-0001.bin>


More information about the llvm-commits mailing list