Compiler bug in Erlang R7B-1 (bit syntax)

Robert Virding <>
Wed Dec 20 14:57:37 CET 2000


Pascal Brisset <> writes:
>A colleague of mine recently noticed the following problem with Erlang
>OTP R7B-1, compiler version 3.0.1.1.
>
>The following code:
>
>| -module(foo).
>| bar() -> case ok of ok -> X=0 end, <<X>>.
>
>crashes the compiler with this error:
>
...
>
>I believe the problem is in v3_core.erl and can be corrected as follows:
>
>--- v3_core.erl.dist    Sat Dec 16 11:39:06 2000
>+++ v3_core.erl Sat Dec 16 11:47:05 2000
>@@ -705,6 +705,8 @@
> 
> lit_vars(#c_var{name=V}, Vs) -> add_element(V, Vs); 
> lit_vars(#c_cons{head=H,tail=T}, Vs) -> lit_vars(H, lit_vars(T, Vs));
>+lit_vars(#c_bin{es=Es}, Vs) -> lit_list_vars(Es, Vs);
>+lit_vars(#c_bin_elem{val=V,size=S}, Vs) -> lit_vars(V, lit_vars(S, Vs));
> lit_vars(#c_tuple{es=Es}, Vs) -> lit_list_vars(Es, Vs);
> lit_vars(Other, Vs) -> Vs.
>
>(I don't know whether #c_bin_elem.type should be scanned as well).

No, the fix is fine, there is no need to check anything but the val and 
size fields.  Without the fix the compiler doesn't detect that X is 
used after the case, and, therefor, produces no code to export it.

The patch will be in the next release.

	Robert





More information about the erlang-questions mailing list