aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2018-06-25 13:19:32 +0200
committerErlang/OTP <[email protected]>2018-06-25 13:19:32 +0200
commit1718d838bd6bab0652cd8cb548bee48ff261cba5 (patch)
treeace1d8b67772f22ae220fc550c046b3a3d041e92 /lib/compiler/src
parent054855f37fe62674ef972452c5de94f9cceaccb7 (diff)
parent3dd17613fc7af70bc7f1222d7381533df0bd4eab (diff)
downloadotp-1718d838bd6bab0652cd8cb548bee48ff261cba5.tar.gz
otp-1718d838bd6bab0652cd8cb548bee48ff261cba5.tar.bz2
otp-1718d838bd6bab0652cd8cb548bee48ff261cba5.zip
Merge branch 'bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150' into maint-21
* bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150: Fix unsafe optimization when running beam_block the second time
Diffstat (limited to 'lib/compiler/src')
-rw-r--r--lib/compiler/src/beam_utils.erl8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 5510624b2d..ff587c4982 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -1105,8 +1105,12 @@ defs([{bif,_,{f,Fail},_Src,Dst}=I|Is], Regs0, D) ->
defs([{block,Block0}|Is], Regs0, D0) ->
{Block,Regs,D} = defs_list(Block0, Regs0, D0),
[{block,[make_anno({def,Regs0})|Block]}|defs(Is, Regs, D)];
-defs([{bs_init,{f,L},_,_,_,Dst}=I|Is], Regs0, D) ->
- Regs = def_regs([Dst], Regs0),
+defs([{bs_init,{f,L},_,Live,_,Dst}=I|Is], Regs0, D) ->
+ Regs1 = case Live of
+ none -> Regs0;
+ _ -> init_def_regs(Live)
+ end,
+ Regs = def_regs([Dst], Regs1),
[I|defs(Is, Regs, update_regs(L, Regs, D))];
defs([{bs_put,{f,L},_,_}=I|Is], Regs, D) ->
[I|defs(Is, Regs, update_regs(L, Regs, D))];