[erlang-bugs] Wrong "this clause cannot match because of a previous clause" warning

José Valim <>
Sun Jun 16 17:38:51 CEST 2013


Hello,

I have found a bug on the "cannot match clause" warning. Consider this
minimal case:

-module(foo).
-export([bar/0]).

bar() ->
  V = <<"hello">>,
  case is_binary(V) of
    false -> good;
    true  -> bad
  end.


When compiled, the code above spews the following warning:

$ erlc foo.erl
foo.erl:7: Warning: this clause cannot match because *a previous* clause at
line 8 always matches


In fact, the clause that always match is the following one and not the
previous one. One simple fix for this issue is to change the message to:

foo.erl:7: Warning: this clause cannot match because *another* clause at
line 8 always matches


One may attempt a smarter fix by checking if the order of the lines but
that would could still generate invalid warnings in case someone decides to
inline case into a single line.


*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Lead Developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20130616/bbc00c67/attachment.html>


More information about the erlang-bugs mailing list