------- Comment #3 from jakub at gcc dot gnu dot org 2010-09-09 11:56 ------- I don't see any problem. All of current trunk, 4.5 and 4.4 print it as b.B::t.T::MBUUITF rather than b$t$MBUUITF and the other difference in the warning message is not caused by unrelated code changes, but actually very much related. With -UBAD_NAMESPACE ::f() function is defined in the current TU and thus the compiler knows it doesn't throw and that D::D() doesn't throw either, with -DBAD_NAMESPACE ::f() is only declared and so the compiler doesn't know it it throws or doesn't, and similarly for D::D(). The is used uninitialized warning is emitted only in basic blocks that are always executed (with -UBAD_NAMESPACE if A::A() is called, it will always pass the uninitialized var to C::g(int); with -DBAD_NAMESPACE if ::f() throws then that wouldn't happen.
-- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45609