[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