summaryrefslogtreecommitdiff
path: root/lib/compiler/src/beam_validator.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compiler/src/beam_validator.erl')
-rw-r--r--lib/compiler/src/beam_validator.erl9
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),