aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/src/dialyzer_utils.erl
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2016-10-21 09:18:36 +0200
committerHans Bolinder <[email protected]>2016-10-21 09:18:36 +0200
commitb36d72178ed0739d6bf71a8047ae0a026ceb4a64 (patch)
tree09948ea259bc4ff994d4fb89ded302ba008a9e70 /lib/dialyzer/src/dialyzer_utils.erl
parent616a4c1d925192b3559ddcad6fcda329ad706dab (diff)
parent055b1b09537b8900489d28ba37078edd7be57d04 (diff)
downloadotp-b36d72178ed0739d6bf71a8047ae0a026ceb4a64.tar.gz
otp-b36d72178ed0739d6bf71a8047ae0a026ceb4a64.tar.bz2
otp-b36d72178ed0739d6bf71a8047ae0a026ceb4a64.zip
Merge branch 'maint'
* maint: 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.erl21
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)];