diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2010-09-01 16:41:47 +0200 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2010-09-01 16:41:52 +0200 |
commit | 7f3922afdc69ba7cc8678c521b0be37c46112c67 (patch) | |
tree | a93a030105bf5858ec254266eb632db52e4b8eb4 /lib | |
parent | e54ddf7c0d3681364b9f335fffd5f95e8d689d9b (diff) | |
parent | 499295576712b14314ebc8f9753af7f0e1198080 (diff) | |
download | otp-7f3922afdc69ba7cc8678c521b0be37c46112c67.tar.gz otp-7f3922afdc69ba7cc8678c521b0be37c46112c67.tar.bz2 otp-7f3922afdc69ba7cc8678c521b0be37c46112c67.zip |
Merge branch 'mp/fix-hipe-icode-exceptions' into dev
* mp/fix-hipe-icode-exceptions:
fix crash in hipe_icode_exceptions
OTP-8800
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hipe/icode/hipe_icode_exceptions.erl | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/hipe/icode/hipe_icode_exceptions.erl b/lib/hipe/icode/hipe_icode_exceptions.erl index 787fb05415..3c8f7b5712 100644 --- a/lib/hipe/icode/hipe_icode_exceptions.erl +++ b/lib/hipe/icode/hipe_icode_exceptions.erl @@ -344,6 +344,16 @@ pop_catch(Cs) -> pop_catch_1([[_|C] | Cs]) -> [C | pop_catch_1(Cs)]; +pop_catch_1([[] | Cs]) -> + %% The elements in the list represent different possible incoming + %% stacks of catch handlers to this BB. Before the fixpoint has + %% been found these elements are underapproximations of the true + %% stacks, therefore it's possible for these elements to be too + %% short for the number of pops implied by the code in the BB. + %% We must not fail in that case, so we set pop([]) = []. + %% This fixes find_catches_crash.erl and compiler_tests in the + %% HiPE test suite. + [[] | pop_catch_1(Cs)]; pop_catch_1([]) -> []. |