[llvm] [llvm-ml] make TEXTEQU directive not to eagerly expand macros in arguments (PR #209526)
Nico Weber via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 07:11:09 PDT 2026
https://github.com/nico updated https://github.com/llvm/llvm-project/pull/209526
>From f9d1530bd0d7a57a32cd664f734dc3c52033a553 Mon Sep 17 00:00:00 2001
From: Xiangfei Ding <dingxiangfei2009 at protonmail.ch>
Date: Tue, 14 Jul 2026 15:12:24 +0000
Subject: [PATCH] [llvm-ml] Fix TEXTEQU directive to not eagerly expand text
macro arguments
Signed-off-by: Xiangfei Ding <dingxiangfei2009 at protonmail.ch>
---
llvm/lib/MC/MCParser/MasmParser.cpp | 15 ++++++++-------
llvm/test/tools/llvm-ml/textequ_expansion.asm | 14 ++++++++++++++
2 files changed, 22 insertions(+), 7 deletions(-)
create mode 100644 llvm/test/tools/llvm-ml/textequ_expansion.asm
diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index 0a4ab8a552dad..8fa328c5963a3 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -2197,9 +2197,11 @@ bool MasmParser::parseStatement(ParseStatementInfo &Info,
break;
case DK_ASSIGN:
case DK_EQU:
- case DK_TEXTEQU:
Lex();
return parseDirectiveEquate(nextVal, IDVal, DirKind, IDLoc);
+ case DK_TEXTEQU:
+ Lex(DoNotExpandMacros);
+ return parseDirectiveEquate(nextVal, IDVal, DirKind, IDLoc);
case DK_BYTE:
if (afterNextTok.is(AsmToken::Identifier) &&
afterNextTok.getString().equals_insensitive("ptr")) {
@@ -2935,14 +2937,13 @@ bool MasmParser::parseDirectiveEquate(StringRef IDVal, StringRef Name,
Value += TextItem;
// Accept a text-list, not just one text-item.
- auto parseItem = [&]() -> bool {
+ while (getTok().is(AsmToken::Comma)) {
+ Lex(DoNotExpandMacros);
if (parseTextItem(TextItem))
- return TokError("expected text item");
+ return TokError("expected text item in '" + Twine(IDVal) +
+ "' directive");
Value += TextItem;
- return false;
- };
- if (parseOptionalToken(AsmToken::Comma) && parseMany(parseItem))
- return addErrorSuffix(" in '" + Twine(IDVal) + "' directive");
+ }
if (!Var.IsText || Var.TextValue != Value) {
switch (Var.Redefinable) {
diff --git a/llvm/test/tools/llvm-ml/textequ_expansion.asm b/llvm/test/tools/llvm-ml/textequ_expansion.asm
new file mode 100644
index 0000000000000..7b7e7a53937a9
--- /dev/null
+++ b/llvm/test/tools/llvm-ml/textequ_expansion.asm
@@ -0,0 +1,14 @@
+; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s
+
+.data
+
+; TEXTEQU with text macro argument should expand correctly.
+part1 TEXTEQU <1>
+part2 TEXTEQU <0>
+joined TEXTEQU part1, part2
+t1 BYTE joined
+
+; CHECK-LABEL: t1:
+; CHECK-NEXT: .byte 10
+
+end
More information about the llvm-commits
mailing list