Bugfix: wrong jump arguments for br_if to loops

This commit is contained in:
Denis Merigoux
2017-08-11 13:38:56 -07:00
parent 5fc61bd6f6
commit 727f297ba9

View File

@@ -499,8 +499,12 @@ fn translate_operator(op: &Operator,
let val = stack.pop().unwrap(); let val = stack.pop().unwrap();
let i = control_stack.len() - 1 - (relative_depth as usize); let i = control_stack.len() - 1 - (relative_depth as usize);
let frame = &mut control_stack[i]; let frame = &mut control_stack[i];
let cut_index = stack.len() - frame.return_values().len(); let jump_args = if frame.is_loop() {
let jump_args = stack.split_off(cut_index); Vec::new()
} else {
let cut_index = stack.len() - frame.return_values().len();
stack.split_off(cut_index)
};
builder builder
.ins() .ins()
.brnz(val, frame.br_destination(), jump_args.as_slice()); .brnz(val, frame.br_destination(), jump_args.as_slice());
@@ -517,9 +521,15 @@ fn translate_operator(op: &Operator,
min_depth = *depth; min_depth = *depth;
} }
} }
let jump_args_count = control_stack[control_stack.len() - 1 - (min_depth as usize)] let jump_args_count = {
.return_values() let i = control_stack.len() - 1 - (min_depth as usize);
.len(); let min_depth_frame = &control_stack[i];
if min_depth_frame.is_loop() {
0
} else {
min_depth_frame.return_values().len()
}
};
if jump_args_count == 0 { if jump_args_count == 0 {
// No jump arguments // No jump arguments
let val = stack.pop().unwrap(); let val = stack.pop().unwrap();