diff options
author | Stavros Aronis <[email protected]> | 2011-11-10 13:33:58 +0100 |
---|---|---|
committer | Stavros Aronis <[email protected]> | 2011-11-18 15:06:46 +0100 |
commit | fc075ff9064eccd3ea2da0c067ec9ef01aaeb183 (patch) | |
tree | c8f863daa82a4f8365cd4a892134e0ec6c7b4ccb /lib/dialyzer | |
parent | d101155c5dc115a51725b52e500c9a981845f2da (diff) | |
download | otp-fc075ff9064eccd3ea2da0c067ec9ef01aaeb183.tar.gz otp-fc075ff9064eccd3ea2da0c067ec9ef01aaeb183.tar.bz2 otp-fc075ff9064eccd3ea2da0c067ec9ef01aaeb183.zip |
Allow none() as return value in callbacks
Diffstat (limited to 'lib/dialyzer')
-rw-r--r-- | lib/dialyzer/src/dialyzer_behaviours.erl | 15 | ||||
-rw-r--r-- | lib/dialyzer/test/behaviour_SUITE_data/src/sample_behaviour/sample_callback_correct_2.erl | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/lib/dialyzer/src/dialyzer_behaviours.erl b/lib/dialyzer/src/dialyzer_behaviours.erl index b478af01df..82963783d8 100644 --- a/lib/dialyzer/src/dialyzer_behaviours.erl +++ b/lib/dialyzer/src/dialyzer_behaviours.erl @@ -110,11 +110,16 @@ check_all_callbacks(Module, Behaviour, [Cb|Rest], Plt, Acc) -> Acc00 = Acc0, {ReturnType, ArgTypes} = RetArgTypes, Acc01 = - case erl_types:t_is_none(erl_types:t_inf(ReturnType, CbReturnType)) of - false -> Acc00; - true -> - [{callback_type_mismatch,[Behaviour, Function, - Arity, ReturnType]}|Acc00] + case erl_types:t_is_subtype(ReturnType, CbReturnType) of + true -> Acc00; + false -> + case erl_types:t_is_none( + erl_types:t_inf(ReturnType, CbReturnType)) of + false -> Acc00; + true -> + [{callback_type_mismatch,[Behaviour, Function, + Arity, ReturnType]}|Acc00] + end end, Acc02 = case erl_types:any_none( diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/sample_behaviour/sample_callback_correct_2.erl b/lib/dialyzer/test/behaviour_SUITE_data/src/sample_behaviour/sample_callback_correct_2.erl index 148cea6843..c218174e58 100644 --- a/lib/dialyzer/test/behaviour_SUITE_data/src/sample_behaviour/sample_callback_correct_2.erl +++ b/lib/dialyzer/test/behaviour_SUITE_data/src/sample_behaviour/sample_callback_correct_2.erl @@ -13,7 +13,7 @@ ]). sample_callback_1() -> 42. % This is a valid return. -sample_callback_2() -> foo. % This is a valid return. +sample_callback_2() -> halt(). % Crashes are also allowed. sample_callback_3() -> {ok, 17}. % This is a valid return. sample_callback_4(Input) -> case Input of |