[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:50:13 PDT 2015


I feel like this is a candidate for 3.7.1

On Fri, Sep 11, 2015 at 1:47 PM, Davide Italiano via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> 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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



-- 
Davide

"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare


More information about the llvm-commits mailing list