diff options
author | Stavros Aronis <[email protected]> | 2012-09-19 16:39:31 +0200 |
---|---|---|
committer | Stavros Aronis <[email protected]> | 2012-09-26 11:04:00 +0200 |
commit | ae36dda6c36ecee6888993f0f275d02e149e7484 (patch) | |
tree | b70ee4fc536ef22027e373ef4f8e762f401bc428 /lib/hipe/cerl | |
parent | 89ca0448e93beed780bc4c233529ce73063e8337 (diff) | |
download | otp-ae36dda6c36ecee6888993f0f275d02e149e7484.tar.gz otp-ae36dda6c36ecee6888993f0f275d02e149e7484.tar.bz2 otp-ae36dda6c36ecee6888993f0f275d02e149e7484.zip |
Fix handling of tuple set remote types appearing in tuple sets
Originally reported by Joseph Wayne Norton, simplified testcase provided by Hans
Bolinder.
Diffstat (limited to 'lib/hipe/cerl')
-rw-r--r-- | lib/hipe/cerl/erl_types.erl | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl index 1579735773..bc7ea17077 100644 --- a/lib/hipe/cerl/erl_types.erl +++ b/lib/hipe/cerl/erl_types.erl @@ -687,8 +687,8 @@ t_solve_remote(?tuple(Types, _Arity, _Tag), ET, R, C) -> {RL, RR} = list_solve_remote(Types, ET, R, C), {t_tuple(RL), RR}; t_solve_remote(?tuple_set(Set), ET, R, C) -> - {NewSet, RR} = tuples_solve_remote(Set, ET, R, C), - {?tuple_set(NewSet), RR}; + {NewTuples, RR} = tuples_solve_remote(Set, ET, R, C), + {t_sup(NewTuples), RR}; t_solve_remote(?remote(Set), ET, R, C) -> RemoteList = ordsets:to_list(Set), {RL, RR} = list_solve_remote_type(RemoteList, ET, R, C), @@ -788,10 +788,10 @@ opaques_solve_remote([#opaque{struct = Struct} = Remote|Tail], ET, R, C) -> tuples_solve_remote([], _ET, _R, _C) -> {[], []}; -tuples_solve_remote([{Sz, Tuples}|Tail], ET, R, C) -> +tuples_solve_remote([{_Sz, Tuples}|Tail], ET, R, C) -> {RL, RR1} = list_solve_remote(Tuples, ET, R, C), {LSzTpls, RR2} = tuples_solve_remote(Tail, ET, R, C), - {[{Sz, RL}|LSzTpls], RR1 ++ RR2}. + {RL ++ LSzTpls, RR1 ++ RR2}. %%----------------------------------------------------------------------------- %% Unit type. Signals non termination. |