http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50317
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-11-28 14:10:40 UTC --- Perhaps we could drop the var ={v} {CLOBBER} stmts when renaming the var into SSA instead. As for gcc47-pr50317-1.patch, the another walk isn't because of the CLOBBERs, what it tries to solve is drop the ADDRESSABLE bit before CDDCE decides to instead optimize all the stores away as unnecessary (the former does the right thing for debug info, the latter does not). The reason why the gcc/tree-ssa-dce.c change doesn't work is that currently we rely on the var in debug stmts to be target_for_debug_bind (which among other conditions means is_gimple_reg). That patch emits debug stmts even for cases where the var is not is_gimple_reg because of TREE_ADDRESSABLE. As nothing drops the TREE_ADDRESSABLE bit later on (on this testcase we could do it somewhere, but not generally, consider e.g. where the first store into some addressable var is necessary, but last store is not). DCE at this point doesn't know if it is removing all references of the addressable var from the IL. Passes that are upset about the !target_for_debug_bind var in debug stmts/debug insns are expansion (it doesn't ICE, but doesn't create the implicit pointer because the var whose address is taken is addressable) and var-tracking (for which it leads to ICEs because VALUE is propagated through into the notes).