summaryrefslogtreecommitdiff
path: root/src/interp/binary-reader-interp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/binary-reader-interp.cc')
-rw-r--r--src/interp/binary-reader-interp.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/interp/binary-reader-interp.cc b/src/interp/binary-reader-interp.cc
index 7a1bc26e..699fdd20 100644
--- a/src/interp/binary-reader-interp.cc
+++ b/src/interp/binary-reader-interp.cc
@@ -576,7 +576,7 @@ Result BinaryReaderInterp::OnFunctionCount(Index count) {
Result BinaryReaderInterp::OnFunction(Index index, Index sig_index) {
CHECK_RESULT(validator_.OnFunction(GetLocation(), Var(sig_index)));
FuncType& func_type = module_.func_types[sig_index];
- module_.funcs.push_back(FuncDesc{func_type, {}, 0, {}});
+ module_.funcs.push_back(FuncDesc{func_type, {}, Istream::kInvalidOffset, {}});
func_types_.push_back(func_type);
return Result::Ok;
}
@@ -1132,7 +1132,10 @@ Result BinaryReaderInterp::OnReturnCallExpr(Index func_index) {
if (func_index >= num_func_imports()) {
istream_.Emit(Opcode::InterpAdjustFrameForReturnCall, func_index);
- istream_.Emit(Opcode::Br, GetFuncOffset(func_index));
+ istream_.Emit(Opcode::Br);
+ // We emit this separately to ensure that the fixup generated by
+ // GetFuncOffset comes after the Br opcode.
+ istream_.Emit(GetFuncOffset(func_index));
} else {
istream_.Emit(Opcode::InterpCallImport, func_index);
istream_.Emit(Opcode::Return);