| Bill Allombert on Sun, 14 Nov 1999 19:54:15 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: subtraction bug |
gp> 1+O(x)
%1 = 1 + O(x)
gp> %-%
*** significant pointers are lost in gerepile !!! (please report)
The bug was caused by incorrect garbage collection.
This bug is very old, but previous versions did not complain.
Strange...
I like very much manual garbage collection, but it leads to very
subtle bugs. Nobody's perfect.
Bill.
(CVS version updated)
Index: src/basemath/gen1.c
===================================================================
RCS file: /home/megrez/cvsroot/pari/src/basemath/gen1.c,v
retrieving revision 1.9
diff -u -r1.9 gen1.c
--- src/basemath/gen1.c 1999/11/13 13:47:27 1.9
+++ src/basemath/gen1.c 1999/11/14 18:42:51
@@ -625,6 +625,7 @@
lx = lg(x);
ly = signe(y)? lg(y): 2;
ly += l; if (lx<ly) ly=lx;
+ av = avma;
z=cgetg(ly,t_SER);
if (l)
{
@@ -639,7 +640,7 @@
}
if (ly>2)
{
- l=avma;
+ tetpil = avma;
for (i=2; i<ly; i++)
{
p1 = gadd((GEN)x[i],(GEN)y[i]);
@@ -652,9 +653,10 @@
z[j-l]=ladd((GEN)x[j],(GEN)y[j]);
z[2]=(long)p1; return z;
}
- avma=l;
+ avma = tetpil;
}
}
+ avma = av;
return zeroser(vx,ly-2+valp(y));
case t_RFRAC: case t_RFRACN: