[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