aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/beam_except.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2014-01-27 11:59:26 +0100
committerBjörn Gustavsson <[email protected]>2014-01-27 11:59:26 +0100
commit930e3e3953b4672e949a6a94d47f8a4035bdd89d (patch)
tree9297274b5e96041caac4b7e7d234f16444a99f6b /lib/compiler/src/beam_except.erl
parentab20369b433a8e6440e5e71a1c92bf7440916192 (diff)
parent3ec5e5594657db530072be69ba94e4e655e4a407 (diff)
downloadotp-930e3e3953b4672e949a6a94d47f8a4035bdd89d.tar.gz
otp-930e3e3953b4672e949a6a94d47f8a4035bdd89d.tar.bz2
otp-930e3e3953b4672e949a6a94d47f8a4035bdd89d.zip
Merge branch 'bjorn/compiler/fix-crash/OTP-11610'
* bjorn/compiler/fix-crash/OTP-11610: beam_except: Eliminate compiler crash
Diffstat (limited to 'lib/compiler/src/beam_except.erl')
-rw-r--r--lib/compiler/src/beam_except.erl10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/compiler/src/beam_except.erl b/lib/compiler/src/beam_except.erl
index e5ec1bd904..d261809765 100644
--- a/lib/compiler/src/beam_except.erl
+++ b/lib/compiler/src/beam_except.erl
@@ -131,9 +131,13 @@ translate_exception(_, _, _, _) -> no.
fix_block(Is, 0) ->
reverse(Is);
-fix_block(Is0, Words) ->
- [{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is] = reverse(Is0),
- [{set,[],[],{alloc,Live,{F1,F2,Needed-Words,F3}}}|Is].
+fix_block(Is, Words) ->
+ fix_block_1(reverse(Is), Words).
+
+fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is], Words) ->
+ [{set,[],[],{alloc,Live,{F1,F2,Needed-Words,F3}}}|Is];
+fix_block_1([I|Is], Words) ->
+ [I|fix_block_1(Is, Words)].
dig_out_block_fc([{set,[],[],{alloc,Live,_}}|Bl]) ->
case dig_out_fc(Bl, Live-1, nil) of