[llvm] [X86][AsmParser] Fix compiler crash on division by zero in MS inline asm (PR #213539)

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 3 05:17:17 PDT 2026


https://github.com/ABWI-Y updated https://github.com/llvm/llvm-project/pull/213539

>From f52a4916023bde41a8c4bde1e450c7de6d046c3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E7=BA=AA=E5=85=83?=
 <chenjiyuan at chenjiyuandeMacBook-Air.local>
Date: Sun, 2 Aug 2026 20:47:13 +0800
Subject: [PATCH] [X86][AsmParser] Fix compiler crash on division by zero in MS
 inline asm

This fixes issue #213415. If a user writes something like '1 / 0' or '1 % 0' in assembly, the compiler will now show a normal error message instead of crashing completely.

Fixes #213415
---
 llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 16 ++++++++++++++--
 llvm/test/MC/X86/intel-expr-div-by-zero.s      |  7 +++++++
 2 files changed, 21 insertions(+), 2 deletions(-)
 create mode 100644 llvm/test/MC/X86/intel-expr-div-by-zero.s

diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 54edcba34a7e9..356eab5d90e34 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -890,6 +890,20 @@ class X86AsmParser : public MCTargetAsmParser {
       default:
         State = IES_ERROR;
         break;
+      case IES_DIVIDE:
+        if (TmpInt == 0) {
+          ErrMsg = "division by zero in assembly expression";
+          State = IES_ERROR;
+          return true;
+        }
+        [[fallthrough]];
+      case IES_MOD: {
+        if (TmpInt == 0) {
+          ErrMsg = "modulo by zero in assembly expression";
+          State = IES_ERROR;
+          return true;
+        }
+        [[fallthrough]];
       case IES_PLUS:
       case IES_MINUS:
       case IES_NOT:
@@ -904,8 +918,6 @@ class X86AsmParser : public MCTargetAsmParser {
       case IES_GE:
       case IES_LSHIFT:
       case IES_RSHIFT:
-      case IES_DIVIDE:
-      case IES_MOD:
       case IES_MULTIPLY:
       case IES_LPAREN:
       case IES_INIT:
diff --git a/llvm/test/MC/X86/intel-expr-div-by-zero.s b/llvm/test/MC/X86/intel-expr-div-by-zero.s
new file mode 100644
index 0000000000000..0e599613d88f3
--- /dev/null
+++ b/llvm/test/MC/X86/intel-expr-div-by-zero.s
@@ -0,0 +1,7 @@
+# RUN: not llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel %s 2>&1 | FileCheck %s
+
+# CHECK: error: division by zero in assembly expression
+mov eax, 1 / 0
+
+# CHECK: error: modulo by zero in assembly expression
+mov eax, 1 % 0



More information about the llvm-commits mailing list