Compiler bug

Hakan Stenholm etxhste@REDACTED
Fri Apr 12 14:41:56 CEST 2002


> To: Hakan Stenholm <etxhste@REDACTED>
> Cc: erlang-questions@REDACTED, james@REDACTED
> Subject: Re: Compiler bug
> From: Bjorn Gustavsson <bjorn@REDACTED>
> Date: 12 Apr 2002 14:10:52 +0200
> 
> The example is legal Erlang code.
> 
> is_list/1 is a type check (from R8). "and", "or", and "not" are now allowed
> (from R8).

Is there a up to date version of the guard expression description ?
Page 29-30 (Concurrent programming in erlang 2:nd edtion) lists most typechecks, 
comparision and bifs allowed.
Erlang Extensions Since 4.4 (html docs) mentions the record/2 and function/1 
typecheck, but where is is_list/1 and the use of "and", "or", and "not" 
mentioned ?

> 
> There really is a bug in the compiler.
> 
> A bug fix will probably be included in the next OS release of R8B.
> 
> /Bjorn
> 
> Hakan Stenholm <etxhste@REDACTED> writes:
> 
> > >I found a compiler bug in R8B-0.  Here is the simplest test case
> > >I could come up with:
> > >
> > >-module(compiler_bug).
> > >-export([test/1]).
> > >
> > >test(A) when not is_list(A) -> A.
> > 
> > This shouldn't work:
> > * you can't use user defined functions (like is_list/1) in a guard, 
> >   only type checks: 
> >   atom/1, constant/1 ,float/1, integer/1, list/1, number/1, pid/1, 
> >   port/1, reference/1, tuple/1, binary/1, record/2
> >   
> >   comparision operartors: 
> >   >,<,=<,>=,==,/=,=:=,=/=
> >   
> >   and some bifs (together with arithmeteric ops): 
> >   element/2, float/1, hd/1, length/1, round/1, self/0, size/1,
> >   trunc/1, tl/1, abs/1, node/1, node/0, nodes/0
> >   
> > * I'm not sure if "and", "or" and "not" can be used (, and ; can be used in 
a 
> >   when statement to get "and" and "or" behaviour).  
> > 
> 
> -- 
> Björn Gustavsson            Ericsson Utvecklings AB
> bjorn@REDACTED      ÄT2/UAB/F/P
> 			    BOX 1505
> +46 8 727 56 87 	    125 25 Älvsjö




More information about the erlang-questions mailing list