With glibc-2.1.2-3, expat in Mozilla chokes when trying to compile with -O. I haven't extensively analyzed it, but it looks like it might be a problem with a macro definition of memset(). This is with the current Mozilla code from CVS, configured with --enable-optimize.
I think my original guess that this is a memset() problem might be wrong. If you remove the line: #define int int32 in expat/xmltok/xmldef.h, the problem goes away. Of course this doesn't guarantee a 32-bit integer, so it's not a real solution.
A workaround is being checked in for mozilla. However, we don't yet know the real reason that the original code did not work, and why it only breaks with -O. Also, it is possible that this is an egcs problem. I'm using egcs-1.1.2-17 from Rawhide.
I am not sure where the problem is - please reopen the bug if you can isolate the problem further.