mirror of
https://github.com/corda/corda.git
synced 2025-06-18 15:18:16 +00:00
add extra type checks to Compiler::store and Compiler::memory
This commit is contained in:
committed by
Joshua Warner
parent
1fc6011bf7
commit
f9b781149e
@ -2323,6 +2323,8 @@ class MyCompiler: public Compiler {
|
|||||||
Operand* index = 0,
|
Operand* index = 0,
|
||||||
unsigned scale = 1)
|
unsigned scale = 1)
|
||||||
{
|
{
|
||||||
|
assert(&c, index != 0 || scale == 1);
|
||||||
|
assert(&c, type.size() == scale || index == 0);
|
||||||
Value* result = value(&c, type);
|
Value* result = value(&c, type);
|
||||||
|
|
||||||
appendMemory(&c, static_cast<Value*>(base), displacement,
|
appendMemory(&c, static_cast<Value*>(base), displacement,
|
||||||
@ -2600,6 +2602,10 @@ class MyCompiler: public Compiler {
|
|||||||
{
|
{
|
||||||
assert(&c, srcType.flavor() == static_cast<Value*>(src)->type.flavor());
|
assert(&c, srcType.flavor() == static_cast<Value*>(src)->type.flavor());
|
||||||
assert(&c, dstType.flavor() == static_cast<Value*>(dst)->type.flavor());
|
assert(&c, dstType.flavor() == static_cast<Value*>(dst)->type.flavor());
|
||||||
|
assert(&c, srcType.flavor() == dstType.flavor());
|
||||||
|
assert(&c,
|
||||||
|
srcType.flavor() != ir::Type::Float
|
||||||
|
|| srcType.size() == static_cast<Value*>(src)->type.size());
|
||||||
appendMove(&c,
|
appendMove(&c,
|
||||||
lir::Move,
|
lir::Move,
|
||||||
srcType.size(),
|
srcType.size(),
|
||||||
|
@ -4145,7 +4145,7 @@ compile(MyThread* t, Frame* initialFrame, unsigned initialIp,
|
|||||||
frame->pushInt(
|
frame->pushInt(
|
||||||
c->load(1,
|
c->load(1,
|
||||||
1,
|
1,
|
||||||
c->memory(array, types.i4, TargetArrayBody, index, 1),
|
c->memory(array, types.i1, TargetArrayBody, index, 1),
|
||||||
TargetBytesPerWord));
|
TargetBytesPerWord));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4153,25 +4153,25 @@ compile(MyThread* t, Frame* initialFrame, unsigned initialIp,
|
|||||||
frame->pushInt(
|
frame->pushInt(
|
||||||
c->loadz(2,
|
c->loadz(2,
|
||||||
2,
|
2,
|
||||||
c->memory(array, types.i4, TargetArrayBody, index, 2),
|
c->memory(array, types.i2, TargetArrayBody, index, 2),
|
||||||
TargetBytesPerWord));
|
TargetBytesPerWord));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case daload:
|
case daload:
|
||||||
frame->pushLong(c->load(
|
frame->pushLong(c->load(
|
||||||
8, 8, c->memory(array, types.f4, TargetArrayBody, index, 8), 8));
|
8, 8, c->memory(array, types.f8, TargetArrayBody, index, 8), 8));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case laload:
|
case laload:
|
||||||
frame->pushLong(c->load(
|
frame->pushLong(c->load(
|
||||||
8, 8, c->memory(array, types.i4, TargetArrayBody, index, 8), 8));
|
8, 8, c->memory(array, types.i8, TargetArrayBody, index, 8), 8));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case saload:
|
case saload:
|
||||||
frame->pushInt(
|
frame->pushInt(
|
||||||
c->load(2,
|
c->load(2,
|
||||||
2,
|
2,
|
||||||
c->memory(array, types.i4, TargetArrayBody, index, 2),
|
c->memory(array, types.i2, TargetArrayBody, index, 2),
|
||||||
TargetBytesPerWord));
|
TargetBytesPerWord));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4245,7 +4245,7 @@ compile(MyThread* t, Frame* initialFrame, unsigned initialIp,
|
|||||||
c->store(types.address,
|
c->store(types.address,
|
||||||
value,
|
value,
|
||||||
types.i1,
|
types.i1,
|
||||||
c->memory(array, types.i4, TargetArrayBody, index, 1));
|
c->memory(array, types.i1, TargetArrayBody, index, 1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case castore:
|
case castore:
|
||||||
@ -4253,14 +4253,14 @@ compile(MyThread* t, Frame* initialFrame, unsigned initialIp,
|
|||||||
c->store(types.address,
|
c->store(types.address,
|
||||||
value,
|
value,
|
||||||
types.i2,
|
types.i2,
|
||||||
c->memory(array, types.i4, TargetArrayBody, index, 2));
|
c->memory(array, types.i2, TargetArrayBody, index, 2));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dastore:
|
case dastore:
|
||||||
c->store(types.f8,
|
c->store(types.f8,
|
||||||
value,
|
value,
|
||||||
types.f8,
|
types.f8,
|
||||||
c->memory(array, types.f4, TargetArrayBody, index, 8));
|
c->memory(array, types.f8, TargetArrayBody, index, 8));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case lastore:
|
case lastore:
|
||||||
@ -5453,8 +5453,8 @@ compile(MyThread* t, Frame* initialFrame, unsigned initialIp,
|
|||||||
memcpy(&v, &singletonValue(t, pool, index - 1), 8);
|
memcpy(&v, &singletonValue(t, pool, index - 1), 8);
|
||||||
frame->pushLong(c->constant(
|
frame->pushLong(c->constant(
|
||||||
v,
|
v,
|
||||||
singletonBit(t, pool, poolSize(t, pool), index - 1) ? types.f4
|
singletonBit(t, pool, poolSize(t, pool), index - 1) ? types.f8
|
||||||
: types.i4));
|
: types.i8));
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case ldiv_: {
|
case ldiv_: {
|
||||||
|
Reference in New Issue
Block a user