diff options
author | Hans Bolinder <[email protected]> | 2016-10-21 09:16:34 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2016-10-21 09:16:34 +0200 |
commit | 055b1b09537b8900489d28ba37078edd7be57d04 (patch) | |
tree | e4502144f074bf226f110fcbb6409f1e0785ab37 /lib/dialyzer/src/dialyzer_utils.erl | |
parent | ad2c3de34f2452378b5c550ddc0795a1fe6efe4c (diff) | |
parent | 56b3298377c7422345076f342c0d99901aee34fc (diff) | |
download | otp-055b1b09537b8900489d28ba37078edd7be57d04.tar.gz otp-055b1b09537b8900489d28ba37078edd7be57d04.tar.bz2 otp-055b1b09537b8900489d28ba37078edd7be57d04.zip |
Merge branch 'fishcakez/dialyzer/fix_attribute_bug/ERL-283/OTP-13979' into maint
* fishcakez/dialyzer/fix_attribute_bug/ERL-283/OTP-13979:
dialyzer: Fix error handling of bad -dialyzer() attributes
Diffstat (limited to 'lib/dialyzer/src/dialyzer_utils.erl')
-rw-r--r-- | lib/dialyzer/src/dialyzer_utils.erl | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl index 76a5cf3d0b..1f2d3e3aaa 100644 --- a/lib/dialyzer/src/dialyzer_utils.erl +++ b/lib/dialyzer/src/dialyzer_utils.erl @@ -514,16 +514,21 @@ get_spec_info([], SpecDict, CallbackDict, {ok, SpecDict, CallbackDict}. -spec get_fun_meta_info(module(), abstract_code(), [dial_warn_tag()]) -> - dialyzer_codeserver:fun_meta_info(). + dialyzer_codeserver:fun_meta_info() | {'error', string()}. get_fun_meta_info(M, Abs, LegalWarnings) -> - NoWarn = get_nowarn_unused_function(M, Abs), - FuncSupp = get_func_suppressions(M, Abs), - Warnings0 = get_options(Abs, LegalWarnings), - Warnings = ordsets:to_list(Warnings0), - ModuleWarnings = [{M, W} || W <- Warnings], - RawProps = lists:append([NoWarn, FuncSupp, ModuleWarnings]), - process_options(dialyzer_utils:family(RawProps), Warnings0). + try + {get_nowarn_unused_function(M, Abs), get_func_suppressions(M, Abs)} + of + {NoWarn, FuncSupp} -> + Warnings0 = get_options(Abs, LegalWarnings), + Warnings = ordsets:to_list(Warnings0), + ModuleWarnings = [{M, W} || W <- Warnings], + RawProps = lists:append([NoWarn, FuncSupp, ModuleWarnings]), + process_options(dialyzer_utils:family(RawProps), Warnings0) + catch throw:{error, _} = Error -> + Error + end. process_options([{M, _}=Mod|Left], Warnings) when is_atom(M) -> [Mod|process_options(Left, Warnings)]; |