diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2013-07-31 10:31:51 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2013-07-31 10:31:51 +0200 |
commit | 30b282072f29f754a9c6d4b121cc04825b9d2d26 (patch) | |
tree | 29da25d244befbcad267eac6522b492d65c39994 | |
parent | d6985f32ff416307f2c4a0d48b4ec7c403b3a962 (diff) | |
download | erlang-30b282072f29f754a9c6d4b121cc04825b9d2d26.tar.gz |
Fix variable usage tracking in some record errors
When reporting a field redefinition in a record, erl_lint can forget
about some old unused variables.
-rw-r--r-- | lib/stdlib/src/erl_lint.erl | 2 | ||||
-rw-r--r-- | lib/stdlib/test/erl_lint_SUITE.erl | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 2e791379c1..8d809b22df 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -2306,7 +2306,7 @@ check_fields(Fs, Name, Fields, Vt, St0, CheckFun) -> check_field({record_field,Lf,{atom,La,F},Val}, Name, Fields, Vt, St, Sfs, CheckFun) -> case member(F, Sfs) of - true -> {Sfs,{Vt,add_error(Lf, {redefine_field,Name,F}, St)}}; + true -> {Sfs,{[],add_error(Lf, {redefine_field,Name,F}, St)}}; false -> {[F|Sfs], case find_field(F, Fields) of diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index a407a94c32..5ff35cff9a 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -560,7 +560,14 @@ unused_vars_warn_rec(Config) when is_list(Config) -> {warnings,[{2,erl_lint,{unused_var,'X'}}, {3,erl_lint,{unused_var,'X'}}, {5,erl_lint,{unused_var,'X'}}, - {7,erl_lint,{unused_var,'X'}}]}}], + {7,erl_lint,{unused_var,'X'}}]}}, + {rec3, + <<"-record(r, {a}). + t() -> X = 1, #r{a=foo, a=bar}. + ">>, + [warn_unused_vars], + {error,[{2,erl_lint,{redefine_field,r,a}}], + [{2,erl_lint,{unused_var,'X'}}]}}], ?line [] = run(Config, Ts), ok. |