aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-06-03 11:53:37 +0200
committerBjörn Gustavsson <[email protected]>2013-06-03 11:53:37 +0200
commit7a1cf0d233d8e3981f1e4a822aa1837591697c3a (patch)
treee1c852da8dd1d0e12bf9aa5546eb48a19df79415 /lib/compiler/src
parent7417446d0e3c4e5e5a15f60b1879cabef1e26408 (diff)
parent2b1bf52eb71f0305247f95d4b10ba49a271a458c (diff)
downloadotp-7a1cf0d233d8e3981f1e4a822aa1837591697c3a.tar.gz
otp-7a1cf0d233d8e3981f1e4a822aa1837591697c3a.tar.bz2
otp-7a1cf0d233d8e3981f1e4a822aa1837591697c3a.zip
Merge branch 'bjorn/compiler/fix-compiler-crash/OTP-11119' into maint
* bjorn/compiler/fix-compiler-crash/OTP-11119: compiler: Correct liveness optimization for wait/1
Diffstat (limited to 'lib/compiler/src')
-rw-r--r--lib/compiler/src/beam_utils.erl4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 554c14f57a..e623bcc6a5 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -734,6 +734,8 @@ live_opt([{loop_rec,_Fail,_Dst}=I|Is], _, D, Acc) ->
live_opt(Is, 0, D, [I|Acc]);
live_opt([timeout=I|Is], _, D, Acc) ->
live_opt(Is, 0, D, [I|Acc]);
+live_opt([{wait,_}=I|Is], _, D, Acc) ->
+ live_opt(Is, 0, D, [I|Acc]);
%% Transparent instructions - they neither use nor modify x registers.
live_opt([{deallocate,_}=I|Is], Regs, D, Acc) ->
@@ -744,8 +746,6 @@ live_opt([{try_end,_}=I|Is], Regs, D, Acc) ->
live_opt(Is, Regs, D, [I|Acc]);
live_opt([{loop_rec_end,_}=I|Is], Regs, D, Acc) ->
live_opt(Is, Regs, D, [I|Acc]);
-live_opt([{wait,_}=I|Is], Regs, D, Acc) ->
- live_opt(Is, Regs, D, [I|Acc]);
live_opt([{wait_timeout,_,{Tag,_}}=I|Is], Regs, D, Acc) when Tag =/= x ->
live_opt(Is, Regs, D, [I|Acc]);
live_opt([{line,_}=I|Is], Regs, D, Acc) ->