[llvm] r247471 - [MC] Don't crash on division by zero.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 11 13:47:36 PDT 2015
Author: davide
Date: Fri Sep 11 15:47:35 2015
New Revision: 247471
URL: http://llvm.org/viewvc/llvm-project?rev=247471&view=rev
Log:
[MC] Don't crash on division by zero.
Differential Revision: http://reviews.llvm.org/D12776
Added:
llvm/trunk/test/MC/ELF/div-by-zero.s
Modified:
llvm/trunk/lib/MC/MCExpr.cpp
Modified: llvm/trunk/lib/MC/MCExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExpr.cpp?rev=247471&r1=247470&r2=247471&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCExpr.cpp (original)
+++ llvm/trunk/lib/MC/MCExpr.cpp Fri Sep 11 15:47:35 2015
@@ -739,7 +739,17 @@ bool MCExpr::evaluateAsRelocatableImpl(M
case MCBinaryExpr::AShr: Result = LHS >> RHS; break;
case MCBinaryExpr::Add: Result = LHS + RHS; break;
case MCBinaryExpr::And: Result = LHS & RHS; break;
- case MCBinaryExpr::Div: Result = LHS / RHS; break;
+ case MCBinaryExpr::Div: {
+ // Handle division by zero. gas just emits a warning and keeps going,
+ // we try to be stricter.
+ // FIXME: Currently the caller of this function has no way to understand
+ // we're bailing out because of 'division by zero'. Therefore, it will
+ // emit a 'expected relocatable expression' error. It would be nice to
+ // change this code to emit a better diagnostic.
+ if (RHS == 0)
+ return false;
+ Result = LHS / RHS; break;
+ }
case MCBinaryExpr::EQ: Result = LHS == RHS; break;
case MCBinaryExpr::GT: Result = LHS > RHS; break;
case MCBinaryExpr::GTE: Result = LHS >= RHS; break;
Added: llvm/trunk/test/MC/ELF/div-by-zero.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/div-by-zero.s?rev=247471&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/div-by-zero.s (added)
+++ llvm/trunk/test/MC/ELF/div-by-zero.s Fri Sep 11 15:47:35 2015
@@ -0,0 +1,6 @@
+// Check that llvm-mc doesn't crash on division by zero.
+// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s 2> %t
+// RUN: FileCheck -input-file %t %s
+
+// CHECK: expected relocatable expression
+.int 1/0
More information about the llvm-commits
mailing list