diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-11 17:47:52 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-11 17:47:52 +0000 |
commit | 6b7e0850a849ca4fff63bf6a031b37e754c5ffc7 (patch) | |
tree | 1061474cc93a41108e8b53f6b1bb38058c193cbf | |
parent | aca6b328677fe567e2e7293600aa8a724ab92219 (diff) | |
download | external_llvm-6b7e0850a849ca4fff63bf6a031b37e754c5ffc7.zip external_llvm-6b7e0850a849ca4fff63bf6a031b37e754c5ffc7.tar.gz external_llvm-6b7e0850a849ca4fff63bf6a031b37e754c5ffc7.tar.bz2 |
llvm-mc: Fix a crash on invalid due to a typo in relocatable expression
evaluation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78692 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/MC/AsmParser/exprs-invalid.s | 8 | ||||
-rw-r--r-- | tools/llvm-mc/AsmExpr.cpp | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/test/MC/AsmParser/exprs-invalid.s b/test/MC/AsmParser/exprs-invalid.s new file mode 100644 index 0000000..4accc39 --- /dev/null +++ b/test/MC/AsmParser/exprs-invalid.s @@ -0,0 +1,8 @@ +// RUN: not llvm-mc -triple i386-unknown-unknown %s 2> %t +// RUN: FileCheck -input-file %t %s + + .text +a: + .data +// CHECK: expected relocatable expression + .long -(0 + a) diff --git a/tools/llvm-mc/AsmExpr.cpp b/tools/llvm-mc/AsmExpr.cpp index c3362e4..fbb0c53 100644 --- a/tools/llvm-mc/AsmExpr.cpp +++ b/tools/llvm-mc/AsmExpr.cpp @@ -81,7 +81,7 @@ bool AsmExpr::EvaluateAsRelocatable(MCContext &Ctx, MCValue &Res) const { break; case AsmUnaryExpr::Minus: /// -(a - b + const) ==> (b - a - const) - if (Value.getSymA() && !Value.getSymA()) + if (Value.getSymA() && !Value.getSymB()) return false; Res = MCValue::get(Value.getSymB(), Value.getSymA(), -Value.getConstant()); |