ARM: raise error message when complex SO expressions can't really be

solved as a constant at compilation time.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204898 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jiangning Liu 2014-03-27 07:42:58 +00:00
parent 229897211b
commit 09b4588309
2 changed files with 9 additions and 1 deletions

View File

@ -9357,7 +9357,7 @@ unsigned ARMAsmParser::validateTargetOperandClass(MCParsedAsmOperand *AsmOp,
const MCExpr *SOExpr = Op->getImm(); const MCExpr *SOExpr = Op->getImm();
int64_t Value; int64_t Value;
if (!SOExpr->EvaluateAsAbsolute(Value)) if (!SOExpr->EvaluateAsAbsolute(Value))
return Match_Success; return Match_InvalidOperand;
assert((Value >= INT32_MIN && Value <= INT32_MAX) && assert((Value >= INT32_MIN && Value <= INT32_MAX) &&
"expression value must be representiable in 32 bits"); "expression value must be representiable in 32 bits");
} }

View File

@ -0,0 +1,8 @@
@ RUN: not llvm-mc -triple=armv7-linux-gnuabi -filetype=obj < %s 2>&1 | FileCheck %s
.text
cmp r2, #(l2 - l1) >> 6
@ CHECK: error: invalid operand for instruction
l1:
l2: