[erlang-patches] [erlang-bugs] Unused variable causing v3_kernel crash

Björn Gustavsson <>
Sun Feb 3 10:58:09 CET 2013


Yes, your fix seems to be correct.

Do you think you could write a test case and
provide some details in the commit message?
(Personally I would put everything into one
commit.)

I suggest that you end your commit message
with:

Reported-by: José Valim



On Sun, Feb 3, 2013 at 3:28 AM, Anthony Ramine <> wrote:

> I may have a fix for this:
>
>         git fetch https://github.com/nox/otp.git fix-seq-opt
>
>         https://github.com/nox/otp/compare/erlang:master...fix-seq-opt
>
> https://github.com/nox/otp/compare/erlang:master...fix-seq-opt.patch
>
> Your bug seems to come from the Core Erlang to Kernel Erlang pass not
> coping with
> multiple values into sequences' arguments, that is expressions which
> values aren't
> used.
>
> My branch adds a new check to core_lint to detect that kind of invalid
> code and
> fixes sys_core_fold so that it doesn't generate it anymore when optimizing
> away
> unused values.
>
> To check that this is indeed sys_core_fold's optimizations that makes the
> compilation fail, do:
>
>         erlc +no_copt sample.erl
>
> To enable the Core Erlang linting pass, do:
>
>         erlc +clint sample.erl
>
> Regards,
>
> --
> Anthony Ramine
>
> Le 2 févr. 2013 à 21:42, José Valim a écrit :
>
> > Hello everyone,
> >
> > The following module fails to compile using both R15B03-01 and R16A:
> >
> >     -module(sample).
> >     -export([hello/1]).
> >
> >     hello(X) ->
> >       case do_something(X) of
> >         false ->
> >           A = false;
> >         Res ->
> >           { A, B } = Res,
> >           do_something(A),
> >           do_something(B)
> >       end,
> >       ThisShouldNotFail = A,
> >       ok.
> >
> >     do_something(X) ->
> >       external:do_something(X).
> >
> > With the following exception:
> >
> >     crash reason: {function_clause,
> >                       [{v3_kernel,lit_vars,
> >                            [{ivalues,
> >                                 [11,{file,"sample.erl"}],
> >                                 [{k_var,[],ker4},{k_atom,[],ok}]}],
> >                            [{file,"v3_kernel.erl"},{line,1749}]},
> >
>  {v3_kernel,uexpr,3,[{file,"v3_kernel.erl"},{line,1628}]},
> >
>  {v3_kernel,ubody,3,[{file,"v3_kernel.erl"},{line,1408}]},
> >
>  {v3_kernel,ubody,3,[{file,"v3_kernel.erl"},{line,1409}]},
> >
>  {v3_kernel,umatch,3,[{file,"v3_kernel.erl"},{line,1716}]},
> >                        {v3_kernel,'-umatch_list/3-anonymous-0-',3,
> >                            [{file,"v3_kernel.erl"},{line,1735}]},
> >
>  {v3_kernel,umatch,3,[{file,"v3_kernel.erl"},{line,1711}]},
> >                        {v3_kernel,'-umatch_list/3-anonymous-0-',3,
> >                            [{file,"v3_kernel.erl"},{line,1735}]}]}
> >
> > The code and exceptions are also available here:
> https://gist.github.com/7bd4eea30cd187e68caa
> >
> > Removing the `ThisShouldNotFail` assignment makes it work correctly,
> although I wouldn't expect it to explode with that line and just output a
> couple warnings instead.
> >
> > This snippet was extract from a more complex code. The name of the
> functions, module and variables do not seem to affect the failure.
> >
> > I tried to further debug the issue but I could not pinpoint the failure.
> Let me know if I can help any further.
> >
> > Thank you for your time,
> >
> >
> > José Valim
> > www.plataformatec.com.br
> > Founder and Lead Developer
> >
> >
> > _______________________________________________
> > erlang-bugs mailing list
> > 
> > http://erlang.org/mailman/listinfo/erlang-bugs
>
> _______________________________________________
> erlang-bugs mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-bugs
>



-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20130203/e224ecb0/attachment.html>


More information about the erlang-patches mailing list