[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