------- Comment #7 from hjl dot tools at gmail dot com 2009-07-23 18:56 ------- Here are the differences between good and bad
GOOD const struct XalanDOMString & theFirstString = (const struct XalanDOMString &) (const struct XalanDOMString *) OBJ_TYPE_REF(*(SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> (&arg1)>->D.20005._vptr.XalanReferenceCountedObject + 72);SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> (&arg1)>->9) (SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> (&arg1)>); BAD const struct XalanDOMString & theFirstString = (const struct XalanDOMString &) (const struct XalanDOMString *) OBJ_TYPE_REF(*(SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> ((const struct XObjectPtr *) arg1)>->D.20005._vptr.XalanReferenceCountedObject + 72);SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> ((const struct XObjectPtr *) arg1)>->9) (SAVE_EXPR <xalanc_1_8::XObjectPtr::operator-> ((const struct XObjectPtr *) arg1)>); That is (&arg1)>->D.20005._vptr.XalanReferenceCountedObject + 72) vs. ((const struct XObjectPtr *) arg1)>->D.20005._vptr.XalanReferenceCountedObject + 72) The correct one is an address. The wrong one is a cast to pointer. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40834