Bill Allombert on Mon, 13 Dec 2004 17:41:42 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Alternative definition of the GEN type. |
Hello PARI developers, Apparently current PARI/GP CVS does not build with gcc 3.x due to strict aliasing problem. Apparenlty setting -fno-strict-aliasing work-around the problem. This is due to recent changes to make gmael et al. valid lvalues. #define gmael(m,x1,x2) (((GEN**) (m))[x1][x2]) Unfortunately mixing GEN** and GEN* break aliasing rules. Probably the best way to implement the GEN type would be to do: ----------- union GEN_s { long l; ulong u; union GEN_s *g; }; typedef union GEN_s *GEN; #define gel(x,i) ((x)[i].g) #define gmael(x,i,j) gel(gel(x,i),j) #define el(x,i) ((x)[i].l) #define uel(x,i) ((x)[i].u) ----------- This way gel(x,i), el(x,i) and uel(x,i) are valid lvalues without requiring any cast. This is data-compatible with the current definition of GEN as long * but mixing the two will reintroduce the strict aliasing problems we are trying to avoid. Cheers, Bill