http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57184
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-05-06 11:24:08 UTC --- Simplified testcase: struct S {}; void bar (struct S *const); static struct S *const c = &(struct S) {}; void foo (void) { bar (c); } Without my fix the invalid tree sharing caused canonicalize_constructor_val to remove the COMPOUND_LITERAL_EXPR from the ADDR_EXPR in DECL_INITIAL of the variable and replace it with the compound literal decl, but now that doesn't happen anymore.