none

Bjorn Gustavsson bjorn@REDACTED
Mon Feb 14 13:54:34 CET 2005


Thanks!

We'll try to fix the bugs for R10B-4.

/Bjorn

mbj@REDACTED writes:

> Hi,
> 
> I've found a bug in the compiler, same in R10B-2 and 3.  Seems to work
> fine in R9.
> 
> Run xx:y() and you'll get 
> 
> ** exited: {{badrecord,bar},
>             [{xx,x,1},
> 
> If e.g. the call to noop is removed it works fine.
> 
> 
> While trying to isolate this error into a small example module, I
> found another bug.  Compiling zz.erl gives:
> 
> zz: function x/1+25:
>   Internal consistency check failed - please report this bug.
>   Instruction: {get_tuple_element,{y,2},2,{x,0}}
>   Error:       {bad_type,{needed,{tuple_element,3}},{actual,{tuple,[2]}}}:
> 
> 
> 
> I'm running on linux, normal erlang installation.
> 
> 
> 
> /martin
> -module(zz).
> -compile(export_all).
> 
> -record(bar, {status, vs = []}).
> 
> y() ->
>     x({foo, 1, []}).
> 
> get_bar() ->
>     #bar{status = 1}.
> 
> x(Trans) ->
>     {foo, Barno, _} = Trans,
>     case get_bar() of
> 	Bar when Bar#bar.status /= 2 ->
> 	    if 1 == 1 ->
> 		    mnesia:dirty_delete({bar, Barno}),
> 		    Vs = [1,2] ++ Bar#bar.vs,
> 		    Bar33 = Bar#bar{status = 1},
> 		    Bar1 = Bar#bar{status = 3,
> 				   vs = Vs},
> 		    [{payment, Barno}];
> 	       true ->
> 		    Barno
> 	    end;
> 	_ ->
> 	    Trans
>     end.
> 
> -module(xx).
> -compile(export_all).
> 
> -record(bar, {status}).
> 
> y() ->
>     x({foo, 1}).
> 
> get_bar() ->
>     #bar{status = 1}.
> 
> x(Trans) ->
>     {foo, Barno} = Trans,
>     case get_bar() of
> 	Bar when Bar#bar.status == 1 ->
> 	    noop(Bar),
> 	    Bar33 = Bar#bar{status = 1},
> 	    {ok, Bar33, Barno};
> 	_ ->
> 	    Trans
>     end.
> 
> noop(_) ->
>     ok.

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list