diff options
author | Henrik Nord <[email protected]> | 2011-04-12 10:48:14 +0200 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2011-04-12 10:48:28 +0200 |
commit | 47fc3df88eada4b07d8805dbc7fd418f6fac1c11 (patch) | |
tree | d1d4ad95372b1df245fe1fac56f10c49043250bc /lib/dialyzer/src | |
parent | 45644a04188fb9e9fae3a6c86b10afac6c739cc2 (diff) | |
parent | beec1818a8f6b3176bd0c7558feaf7cecad3da3a (diff) | |
download | otp-47fc3df88eada4b07d8805dbc7fd418f6fac1c11.tar.gz otp-47fc3df88eada4b07d8805dbc7fd418f6fac1c11.tar.bz2 otp-47fc3df88eada4b07d8805dbc7fd418f6fac1c11.zip |
Merge branch 'sa/dialyzer-invalid-spec-fix' into dev
* sa/dialyzer-invalid-spec-fix:
Fix crash related with the contract blame assignment patch
OTP-9219
Diffstat (limited to 'lib/dialyzer/src')
-rw-r--r-- | lib/dialyzer/src/dialyzer_succ_typings.erl | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl index 24d6013692..b8da57d3f9 100644 --- a/lib/dialyzer/src/dialyzer_succ_typings.erl +++ b/lib/dialyzer/src/dialyzer_succ_typings.erl @@ -155,19 +155,24 @@ postprocess_dataflow_warns(RawWarnings, State, WarnAcc) -> postprocess_dataflow_warns([], _State, WAcc, Acc) -> {WAcc, lists:reverse(Acc)}; -postprocess_dataflow_warns([{?WARN_CONTRACT_RANGE, {File, CallL}, Msg}|Rest], +postprocess_dataflow_warns([{?WARN_CONTRACT_RANGE, {CallF, CallL}, Msg}|Rest], #st{codeserver = Codeserver} = State, WAcc, Acc) -> {contract_range, [Contract, M, F, A, ArgStrings, CRet]} = Msg, - {ok, {{File, _ContrL} = FileLine, _C}} = + {ok, {{ContrF, _ContrL} = FileLine, _C}} = dialyzer_codeserver:lookup_mfa_contract({M,F,A}, Codeserver), - NewMsg = - {contract_range, [Contract, M, F, ArgStrings, CallL, CRet]}, - W = {?WARN_CONTRACT_RANGE, FileLine, NewMsg}, - Filter = - fun({?WARN_CONTRACT_TYPES, FL, _}) when FL =:= FileLine -> false; - (_) -> true - end, - postprocess_dataflow_warns(Rest, State, lists:filter(Filter, WAcc), [W|Acc]); + case CallF =:= ContrF of + true -> + NewMsg = {contract_range, [Contract, M, F, ArgStrings, CallL, CRet]}, + W = {?WARN_CONTRACT_RANGE, FileLine, NewMsg}, + Filter = + fun({?WARN_CONTRACT_TYPES, FL, _}) when FL =:= FileLine -> false; + (_) -> true + end, + FilterWAcc = lists:filter(Filter, WAcc), + postprocess_dataflow_warns(Rest, State, FilterWAcc, [W|Acc]); + false -> + postprocess_dataflow_warns(Rest, State, WAcc, Acc) + end; postprocess_dataflow_warns([W|Rest], State, Wacc, Acc) -> postprocess_dataflow_warns(Rest, State, Wacc, [W|Acc]). |