[llvm] [llvm-mc] Propagate invalid-token errors from byteArrayFromString (PR #217533)

via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 27 22:45:56 PDT 2026


https://github.com/StevenYangCC updated https://github.com/llvm/llvm-project/pull/217533

>From a4174974c5f33167426de20b1c06b684e755be4b Mon Sep 17 00:00:00 2001
From: "chengcang.yang" <yangchengcang at gmail.com>
Date: Wed, 19 Aug 2026 18:23:24 +0800
Subject: [PATCH] [llvm-mc] Propagate invalid-token errors from
 byteArrayFromString

byteArrayFromString always returned false after skipping an invalid
non-hex token, so llvm-mc exited 0 despite printing errors. Track
whether an error occurred so the process status matches, and cover the
non-hex parse path in the existing X86 hex-bytes disassembler test.
---
 llvm/test/MC/Disassembler/X86/hex-bytes.txt | 15 +++++++++++++++
 llvm/tools/llvm-mc/Disassembler.cpp         |  4 +++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/llvm/test/MC/Disassembler/X86/hex-bytes.txt b/llvm/test/MC/Disassembler/X86/hex-bytes.txt
index 7d94ca9ab3e9f..4614854433c42 100644
--- a/llvm/test/MC/Disassembler/X86/hex-bytes.txt
+++ b/llvm/test/MC/Disassembler/X86/hex-bytes.txt
@@ -4,6 +4,9 @@
 # RUN: not llvm-mc -triple=x86_64 --disassemble --hex decode2.s 2>&1 | FileCheck %s --check-prefix=DECODE2 --implicit-check-not=warning:
 # RUN: not llvm-mc -triple=x86_64 --disassemble --hex err1.s 2>&1 | FileCheck %s --check-prefix=ERR1 --implicit-check-not=error:
 # RUN: not llvm-mc -triple=x86_64 --disassemble --hex err2.s 2>&1 | FileCheck %s --check-prefix=ERR2 --implicit-check-not=error:
+## Default (non --hex) byte lists take a different parse path in
+## byteArrayFromString. An invalid token must fail the process, not just print.
+# RUN: not llvm-mc -triple=x86_64 --disassemble err3.s 2>&1 | FileCheck %s --check-prefix=ERR3 --implicit-check-not=error:
 
 #--- a.s
 4883ec08 31  # comment
@@ -60,3 +63,15 @@ c
 # ERR2:      nop
 # ERR2-NEXT: int3
 # ERR2-EMPTY:
+
+#--- err3.s
+not-a-byte
+256
+0x100
+0x90
+
+# ERR3:      1:1: error: invalid input token
+# ERR3:      2:1: error: invalid input token
+# ERR3:      3:1: error: invalid input token
+# ERR3:      nop
+# ERR3-EMPTY:
diff --git a/llvm/tools/llvm-mc/Disassembler.cpp b/llvm/tools/llvm-mc/Disassembler.cpp
index ba6e79d0b7016..2a97ef1ae4db4 100644
--- a/llvm/tools/llvm-mc/Disassembler.cpp
+++ b/llvm/tools/llvm-mc/Disassembler.cpp
@@ -116,6 +116,7 @@ static bool SkipToToken(StringRef &Str) {
 
 static bool byteArrayFromString(ByteArrayTy &ByteArray, StringRef &Str,
                                 SourceMgr &SM, bool HexBytes) {
+  bool ErrorOccurred = false;
   while (SkipToToken(Str)) {
     // Handled by higher level
     if (Str[0] == '[' || Str[0] == ']')
@@ -151,6 +152,7 @@ static bool byteArrayFromString(ByteArrayTy &ByteArray, StringRef &Str,
       Str = Str.substr(Str.find('\n'));
       ByteArray.first.clear();
       ByteArray.second.clear();
+      ErrorOccurred = true;
       continue;
     }
 
@@ -159,7 +161,7 @@ static bool byteArrayFromString(ByteArrayTy &ByteArray, StringRef &Str,
     Str = Str.substr(Next);
   }
 
-  return false;
+  return ErrorOccurred;
 }
 
 int Disassembler::disassemble(const Target &T, MCSubtargetInfo &STI,



More information about the llvm-commits mailing list