https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100464
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- So the difference is that 'b' is TREE_ADDRESSABLE with -g but not without. in forwprop2 we do - # DEBUG j$40 => MEM <int *> [(int *[33] *)&*.LC0{&} + 40B] + # DEBUG j$40 => &b{&} and that makes b TREE_ADDRESSABLE which happens in tree canonicalize_constructor_val (tree cval, tree from_decl) { ... if (VAR_P (base)) TREE_ADDRESSABLE (base) = 1; which was added in r181197 as to fix "Java early folding". I'll test removing that (it should assert the addressable flag is set, but _not_ when we're ultimatively coming from a debug stmt which means it'll be awkward to keep).