diff options
Diffstat (limited to 'lib/compiler/src/beam_validator.erl')
-rw-r--r-- | lib/compiler/src/beam_validator.erl | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl index 050dc563eb..5ba6083516 100644 --- a/lib/compiler/src/beam_validator.erl +++ b/lib/compiler/src/beam_validator.erl @@ -999,13 +999,16 @@ vi({bs_create_bin,{f,Fail},Heap,Live,Unit,Dst,{list,List}}, Vst0) -> verify_live(Live, Vst0), verify_y_init(Vst0), verify_create_bin_list(List, Vst0), - Vst = heap_alloc(Heap, Vst0), + Vst = prune_x_regs(Live, Vst0), branch(Fail, Vst, + fun(FailVst0) -> + heap_alloc(0, FailVst0) + end, fun(SuccVst0) -> SuccVst1 = update_create_bin_list(List, SuccVst0), - SuccVst = prune_x_regs(Live, SuccVst1), + SuccVst = heap_alloc(Heap, SuccVst1), create_term(#t_bitstring{size_unit=Unit}, bs_create_bin, [], Dst, - SuccVst, SuccVst1) + SuccVst) end); vi({bs_init2,{f,Fail},Sz,Heap,Live,_,Dst}, Vst0) -> verify_live(Live, Vst0), |