From wdunlap at tibco.com  Tue Jun  2 03:45:33 2009
From: wdunlap at tibco.com (William Dunlap)
Date: Mon, 1 Jun 2009 18:45:33 -0700
Subject: [Rd] reference counting bug: overwriting for loop 'seq' variable
Message-ID: <77EB52C6DD32BA4D87471DCD70C8D7000147B6C7@NA-PA-VBE03.na.tibco.com>

It looks like the 'seq' variable to 'for' can be altered from
within the loop, leading to incorrect answers.  E.g., in
the following I'd expect 'sum' to be 1+2=3, but R 2.10.0
(svn 48686) gives 44.5.

   > x = c(1,2);  sum = 0; for (i in x) { x[i+1] = i + 42.5; sum = sum +
i }; sum
   [1] 44.5
or, with a debugging cat()s,
   > x = c(1,2);  sum = 0; for (i in x) { cat("before, i=", i, "\n");
x[i+1] = i + 42.5; cat("after, i=", i,"\n"); sum = sum + i }; sum
   before, i= 1
   after, i= 1
   before, i= 43.5
   after, i= 43.5
   [1] 44.5
 
If I force the for's 'seq' to be a copy of x by adding 0 to it, then I
do get the expected answer.

   > x = c(1,2);  sum = 0; for (i in x+0) { x[i+1] = i + 42.5; sum = sum
+ i }; sum
   bbbbb[1] 3

It looks like an error in reference counting. 

Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com 



[Rd] reference counting bug: overwriting for loop 'seq' variable
William Dunlap