[erlang-bugs] Double evaluation when using weird record syntax

Dominic Williams erlang@REDACTED
Sun Dec 23 19:20:34 CET 2007


Hello,

The compiler seems to generate a double evaluation in the 
following case:

-module(double_evaluation).
-export([run/0]).
-record(r, {f}).

maker(F) ->
     io:format("maker(~p)~n",[F]),
     #r{f=F}.

run()->
     (maker(1))#r{f=0},
     (maker(2))#r{}.      % maker/1 called twice


Eshell V5.5.4  (abort with ^G)
1> c(double_evaluation).
{ok,double_evaluation}
2> double_evaluation:run().
maker(1)
maker(2)
maker(2)
{r,2}


I am not even sure what it should mean to use #r{} after an 
expression with nothing between the braces, but this turned 
up in some production code, and the double evaluation 
appeared sometime after R8, causing a new bug in our system.

Regards,

Dominic Williams
http://dominicwilliams.net

----




More information about the erlang-bugs mailing list