summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2021-10-13 09:23:11 +0200
committerBjörn Gustavsson <bjorn@erlang.org>2021-10-14 04:59:22 +0200
commitd4310157c0e14db24139e687c72762062395affe (patch)
treee4b5addbcd84fff8fda36d90c41bf6ab111401e8
parent32580e8943ae3ad46d788ab29d03169cf606bae0 (diff)
downloaderlang-d4310157c0e14db24139e687c72762062395affe.tar.gz
fixup! compiler: Add a new instruction for creating binaries
-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),