Attention ROOT users: bug in GCC

Pasha Murat (murat@cdfsga.fnal.gov)
Mon, 20 Oct 1997 15:50:32 GMT


Those of us who use GCC-compiled ROOT shold be aware of a weird
compiler bug present in version 2.7.2.x:

declaration of virtual function in the class header makes compiler
(sometimes?) to forget about the definitions of inline methods of this
class:
---------------------------------------------------------- test.cc
class A {
int a;
public:
A();
~A();
inline int aa() { return 1; }
virtual int qqqq();
};

main() {
A q;
int b = q.aa();
}
--------------------------------------------------
/data35/upgrade/murat/run1>gcc -c test.cc ; nm test.o | grep aa
U aa__1A
--------------------------------------------------------------------------------
You see that *inline* method A::aa() body of which should normally be inserted
into the source code has been considered to be an *external* function by GCC.

As ClassDef(..) macro contains declarations of virtual functions this may cause
problems for people using GCC-compiled ROOT.

This "feature" is reproducible on IRIX 6.2 and on AIX 4.2.
For some reasons switching ON optimization on AIX resolves the problem, on
IRIX however it doesn't help. I didn't try versions of GCC other than
2.7.2.1(IRIX) and 2.7.2.2(AIX Power PC).

The only other C++ compiler I tried on UNIX - KAI C++ (on IRIX 6.2) doesn't
have this bug.
Regards, Pasha.