aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2019-05-24 16:08:55 +0200
committerBjörn Gustavsson <[email protected]>2019-05-27 13:15:41 +0200
commitf7fe4573880ce94d794af266d0f37459b7a86709 (patch)
treefdcad9bc9ff6540edcb6b66144608d017a7378d0 /lib/compiler/src
parentd32991afaf3fc5f9f73e3e2448672bb9a1b80101 (diff)
downloadotp-f7fe4573880ce94d794af266d0f37459b7a86709.tar.gz
otp-f7fe4573880ce94d794af266d0f37459b7a86709.tar.bz2
otp-f7fe4573880ce94d794af266d0f37459b7a86709.zip
Fix compiler crash in beam_except
The compiler would crash in `beam_except` while compiling this function: bar(Req) -> ok = case Req of "POST" -> {error, <<"BAD METHOD ", Req/binary>>, Req}; _ -> ok end. https://bugs.erlang.org/browse/ERL-954
Diffstat (limited to 'lib/compiler/src')
-rw-r--r--lib/compiler/src/beam_except.erl7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_except.erl b/lib/compiler/src/beam_except.erl
index 28c89782c9..2305502800 100644
--- a/lib/compiler/src/beam_except.erl
+++ b/lib/compiler/src/beam_except.erl
@@ -140,8 +140,11 @@ fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed0,F3}}}|Is], Words) ->
[{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is]
end;
fix_block_1([I|Is], Words) ->
- [I|fix_block_1(Is, Words)].
-
+ [I|fix_block_1(Is, Words)];
+fix_block_1([], _Words) ->
+ %% Rare. The heap allocation was probably done by a binary
+ %% construction instruction.
+ [].
dig_out_fc(Arity, Is0) ->
Regs0 = maps:from_list([{{x,X},{arg,X}} || X <- seq(0, Arity-1)]),