------- Additional Comments From matz at suse dot de 2005-04-15 03:16 ------- One strange thing is, that the call to getWidth() in B is already in .generic: if (retval.1) { getWidth (&i_bnds); } while the call to getWidth() in isEmpty() (which is inlined later into B()) is D.1595 = this->_vptr.IMG_Rect; D.1596 = *D.1595; D.1597 = OBJ_TYPE_REF(D.1596;this->0) (this); D.1594 = D.1597 == 0; Both are actually virtual calls of course, so I wonder why they are represented differently. Note that this doesn't change if I make B() a method of IMG_Rect. I thought initially that might be a difference, as isEmpty is one. Another fact is, that if I comment out the totally unrelated useless decl for getVisibility(), it works. The .i01.cgraph dump in that case shows these Initial entry points: void B() void A() Unit entry points: void B() void A() virtual bool IMG_Rect::isEmpty() const virtual int IMG_Rect::getWidth() const while when it breaks (i.e. when getVisibility is there) it looks like: Initial entry points: void B() void A() Unit entry points: void B() void A() See how the two methods in question are now missing. As they are declared inline this actually should be okay, and that getVisibility makes a difference might be another bug, which hides this one sometimes.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20991