summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2013-07-31 10:31:51 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2013-07-31 10:31:51 +0200
commit30b282072f29f754a9c6d4b121cc04825b9d2d26 (patch)
tree29da25d244befbcad267eac6522b492d65c39994
parentd6985f32ff416307f2c4a0d48b4ec7c403b3a962 (diff)
downloaderlang-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.erl2
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl9
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.