mirror of
https://github.com/corda/corda.git
synced 2025-01-03 19:54:13 +00:00
fix crash when AOT compiling switch statement with only a default case
The existing code handled such odd switch statements correctly in the JIT case, but did the wrong thing for the AOT case, leading to an assertion failure later on.
This commit is contained in:
parent
59280c5780
commit
265ab63e19
@ -5527,12 +5527,12 @@ compile(MyThread* t, Frame* initialFrame, unsigned ip,
|
||||
uint32_t defaultIp = base + codeReadInt32(t, code, ip);
|
||||
assert(t, defaultIp < codeLength(t, code));
|
||||
|
||||
Compiler::Operand* default_ = frame->addressOperand
|
||||
(frame->addressPromise(c->machineIp(defaultIp)));
|
||||
|
||||
int32_t pairCount = codeReadInt32(t, code, ip);
|
||||
|
||||
if (pairCount) {
|
||||
Compiler::Operand* default_ = frame->addressOperand
|
||||
(frame->addressPromise(c->machineIp(defaultIp)));
|
||||
|
||||
Promise* start = 0;
|
||||
THREAD_RUNTIME_ARRAY(t, uint32_t, ipTable, pairCount);
|
||||
for (int32_t i = 0; i < pairCount; ++i) {
|
||||
@ -5574,7 +5574,7 @@ compile(MyThread* t, Frame* initialFrame, unsigned ip,
|
||||
}
|
||||
} else {
|
||||
// a switch statement with no cases, apparently
|
||||
c->jmp(default_);
|
||||
c->jmp(frame->machineIp(defaultIp));
|
||||
}
|
||||
|
||||
ip = defaultIp;
|
||||
|
Loading…
Reference in New Issue
Block a user