[erlang-patches] [erlang-bugs] Compiler/linter bug breaking unused variable warnings

Fredrik <>
Fri Jun 7 09:21:28 CEST 2013


On 06/06/2013 01:47 AM, Anthony Ramine wrote:
> Hello,
>
> When analyzing complex expressions (i.e. comprehensions, cases, tries, ifs and receives), erl_lint does not forget about old unused variables when returning the updated variable table. This causes a bug where old
> unused variables are not recorded as such:
>
> t(X, Y) ->
>    #r{a=[ K || K<- Y ],b=[ K || K<- Y ].
>
> As erl_lint uses vtmerge_pat/2 to merge the results of the analysis of the two list comprehensions, X is marked as used and the warning is not emitted.
>
> The function vtmerge_pat/2 is used instead of the similar vtmerge/2 which does not mark multiple occurrences of a variable as usage to handle cases like the following one:
>
> t(X, Y) ->
>    #r{a=A=X,b=A=Y}.
>
> Other simpler expressions like conses, tuples and external fun references does not correctly follow this behaviour.
>
> This patch fixes both issues and makes erl_lint not return old unused variables in updated tables and makes all compound expressions use vtmerge_pat/2.
>
> 	git fetch https://github.com/nox/otp.git fix-erl_lint-variable-usage
>
> 	https://github.com/nox/otp/compare/erlang:maint...fix-erl_lint-variable-usage
> 	https://github.com/nox/otp/compare/erlang:maint...fix-erl_lint-variable-usage.patch
>
> Regards,
>
Hello,
I've fetched your patch and it should be visible in the 'pu' branch 
shortly. I also assigned it to be reviewed by the responsible team 
directly.
Thanks,

-- 

BR Fredrik Gustafsson
Erlang OTP Team



More information about the erlang-patches mailing list