diff options
author | Hans Bolinder <[email protected]> | 2016-09-09 08:16:55 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2016-09-12 09:37:15 +0200 |
commit | edaa208b4aa5e9e6e67df9eae4fa5e70791a7002 (patch) | |
tree | 6500135f707fa46991eaf5036a4a1f2471dc1663 | |
parent | 86d1fb0865193cce4e308baa6472885a81033f10 (diff) | |
download | otp-edaa208b4aa5e9e6e67df9eae4fa5e70791a7002.tar.gz otp-edaa208b4aa5e9e6e67df9eae4fa5e70791a7002.tar.bz2 otp-edaa208b4aa5e9e6e67df9eae4fa5e70791a7002.zip |
parsetools: Suppress Dialyzer-warnings
When using Yecc's operator precedence declarations (Right, Nonassoc,
Left), it is possible that some clauses of the generated code are
unreachable. Dialyzer complains, at least if SET_LIMIT in erl_types is
set sufficiently high (to avoid sets of integers to collapse to the
integer() type). Rather than trying to figure out exactly which
clauses are unreachable, Yecc generates a Dialyzer suppression.
-rw-r--r-- | lib/parsetools/src/yecc.erl | 3 | ||||
-rw-r--r-- | lib/parsetools/test/yecc_SUITE.erl | 8 |
2 files changed, 6 insertions, 5 deletions
diff --git a/lib/parsetools/src/yecc.erl b/lib/parsetools/src/yecc.erl index 1b426141a1..f6b80eb1b4 100644 --- a/lib/parsetools/src/yecc.erl +++ b/lib/parsetools/src/yecc.erl @@ -1978,7 +1978,8 @@ output_goto(St, [{_Nonterminal, []} | Go], StateInfo) -> output_goto(St, Go, StateInfo); output_goto(St0, [{Nonterminal, List} | Go], StateInfo) -> F = function_name(yeccgoto, Nonterminal), - St10 = output_goto1(St0, List, F, StateInfo, true), + St05 = fwrite(St0, <<"-dialyzer({nowarn_function, ~w/7}).\n">>, [F]), + St10 = output_goto1(St05, List, F, StateInfo, true), St = output_goto_fini(F, Nonterminal, St10), output_goto(St, Go, StateInfo); output_goto(St, [], _StateInfo) -> diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl index 3710569aba..e91ddb11d1 100644 --- a/lib/parsetools/test/yecc_SUITE.erl +++ b/lib/parsetools/test/yecc_SUITE.erl @@ -342,7 +342,7 @@ syntax(Config) when is_list(Config) -> {L2,_,{bad_inline,{yeccpars2_2_,1}}}]}], []} = compile:file(Parserfile1, [basic_validation,return]), ?line L1 = 31 + SzYeccPre, - ?line L2 = 38 + SzYeccPre + ?line L2 = 39 + SzYeccPre end(), %% Bad macro in action. OTP-7224. @@ -360,7 +360,7 @@ syntax(Config) when is_list(Config) -> {L2,_,{bad_inline,{yeccpars2_2_,1}}}]}], []} = compile:file(Parserfile1, [basic_validation,return]), ?line L1 = 31 + SzYeccPre, - ?line L2 = 38 + SzYeccPre + ?line L2 = 39 + SzYeccPre end(), %% Check line numbers. OTP-7224. @@ -1623,7 +1623,7 @@ otp_7292(Config) when is_list(Config) -> [{_,[{16,_,{unused_function,{foo,0}}}]}]} = compile:file(Parserfile1, [basic_validation, return]), L1 = 41 + SzYeccPre, - L2 = 48 + SzYeccPre + L2 = 49 + SzYeccPre end(), YeccPre = filename:join(Dir, "yeccpre.hrl"), @@ -1641,7 +1641,7 @@ otp_7292(Config) when is_list(Config) -> [{_,[{16,_,{unused_function,{foo,0}}}]}]} = compile:file(Parserfile1, [basic_validation, return]), ?line L1 = 40 + SzYeccPre, - ?line L2 = 47 + SzYeccPre + ?line L2 = 48 + SzYeccPre end(), file:delete(YeccPre), |