mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-30 23:21:04 +00:00
MCObjectStreamer : fail with a diagnostic when emitting an out of range value.
We were previously silently emitting bogus data in release mode, making it very hard to diagnose the error, or crashing with an assert in debug mode. A proper diagnostic is now always emitted when the value to be emitted is out of range. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303041 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4448b5e925
commit
d49739e03c
@ -133,6 +133,11 @@ void MCObjectStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,
|
||||
// Avoid fixups when possible.
|
||||
int64_t AbsValue;
|
||||
if (Value->evaluateAsAbsolute(AbsValue, getAssembler())) {
|
||||
if (!isUIntN(8 * Size, AbsValue) && !isIntN(8 * Size, AbsValue)) {
|
||||
getContext().reportError(
|
||||
Loc, "value evaluated as " + Twine(AbsValue) + " is out of range.");
|
||||
return;
|
||||
}
|
||||
EmitIntValue(AbsValue, Size);
|
||||
return;
|
||||
}
|
||||
|
@ -1,5 +1,14 @@
|
||||
// RUN: not llvm-mc -triple aarch64-elf -filetype=obj %s -o /dev/null 2>&1 | FileCheck %s
|
||||
|
||||
.data
|
||||
b:
|
||||
.fill 300
|
||||
e:
|
||||
.byte e - b
|
||||
// CHECK: error: value evaluated as 300 is out of range.
|
||||
// CHECK-NEXT: .byte e - b
|
||||
// CHECK-NEXT: ^
|
||||
|
||||
.section sec_x
|
||||
start:
|
||||
.space 5000
|
||||
|
Loading…
Reference in New Issue
Block a user