diff options
author | Hans Bolinder <[email protected]> | 2019-02-11 08:59:05 +0100 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2019-02-11 08:59:05 +0100 |
commit | 5a5e34ab31417f0cea2859ea8e22c04f59e82193 (patch) | |
tree | bd494099f42ac729836d6798250e13ee85c8f2f7 | |
parent | eac67ca98374701eb27be53836a216e8600be4aa (diff) | |
parent | fbb6ee2fa4fca7b908fcd502c769a66420765b36 (diff) | |
download | otp-5a5e34ab31417f0cea2859ea8e22c04f59e82193.tar.gz otp-5a5e34ab31417f0cea2859ea8e22c04f59e82193.tar.bz2 otp-5a5e34ab31417f0cea2859ea8e22c04f59e82193.zip |
Merge branch 'maint'
* maint:
dialyzer: Fix a bug affecting keyfind/keysearch/keymember
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/src/lists_key_bug.erl | 19 | ||||
-rw-r--r-- | lib/hipe/cerl/erl_bif_types.erl | 6 |
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/src/lists_key_bug.erl b/lib/dialyzer/test/small_SUITE_data/src/lists_key_bug.erl new file mode 100644 index 0000000000..d7cbc27a4d --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/src/lists_key_bug.erl @@ -0,0 +1,19 @@ +-module(lists_key_bug). + +%% OTP-15570 + +-export([t/1]). + +t(V) -> + K = key(V), + case lists:keyfind(K, 1, [{<<"foo">>, bar}]) of + false -> + a; + {_, _} -> + b + end. + +key(1) -> + 3; +key(2) -> + <<"foo">>. diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl index 48ce641ab9..799957dfdc 100644 --- a/lib/hipe/cerl/erl_bif_types.erl +++ b/lib/hipe/cerl/erl_bif_types.erl @@ -2224,11 +2224,7 @@ type_order() -> [t_number(), t_atom(), t_reference(), t_fun(), t_port(), t_pid(), t_tuple(), t_map(), t_list(), t_bitstr()]. -key_comparisons_fail(X0, KeyPos, TupleList, Opaques) -> - X = case t_is_number(t_inf(X0, t_number(), Opaques), Opaques) of - false -> X0; - true -> t_number() - end, +key_comparisons_fail(X, KeyPos, TupleList, Opaques) -> lists:all(fun(Tuple) -> Key = type(erlang, element, 2, [KeyPos, Tuple]), t_is_none(t_inf(Key, X, Opaques)) |