diff options
author | Magnus Lång <[email protected]> | 2016-04-19 15:02:17 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2016-04-28 16:16:10 +0200 |
commit | 29253c06dd99717e8424c0418144fd95d232c38d (patch) | |
tree | ff4f7a891ba26d05a8479936a073610cbf8cb760 /lib/hipe/cerl | |
parent | d2ba8674603bc4ef210ec91e6f51924f7efe8c2e (diff) | |
download | otp-29253c06dd99717e8424c0418144fd95d232c38d.tar.gz otp-29253c06dd99717e8424c0418144fd95d232c38d.tar.bz2 otp-29253c06dd99717e8424c0418144fd95d232c38d.zip |
erl_types: Fix t_subtract/2 correctness bug
t_subtract/2 would break its postcondition by always returning the
underapproximation none() when given a variable on the right hand side.
This broke map type parsing, since it relied on t_subtract/2 to tell it
when map keys would shadow each other.
Diffstat (limited to 'lib/hipe/cerl')
-rw-r--r-- | lib/hipe/cerl/erl_types.erl | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl index 8057e37d0c..1f0bc7eda1 100644 --- a/lib/hipe/cerl/erl_types.erl +++ b/lib/hipe/cerl/erl_types.erl @@ -3694,7 +3694,7 @@ t_subtract_list(T, []) -> -spec t_subtract(erl_type(), erl_type()) -> erl_type(). t_subtract(_, ?any) -> ?none; -t_subtract(_, ?var(_)) -> ?none; +t_subtract(T, ?var(_)) -> T; t_subtract(?any, _) -> ?any; t_subtract(?var(_) = T, _) -> T; t_subtract(T, ?unit) -> T; |