No subject

mbj <>
Mon Feb 14 09:12:01 CET 2005


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
-------------- next part --------------
-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.

-------------- next part --------------
-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.


More information about the erlang-questions mailing list