------- Comment #6 from jakub at gcc dot gnu dot org 2009-09-16 11:53 ------- With: --- var-tracking.c.xx 2009-09-16 09:17:52.000000000 +0200 +++ var-tracking.c 2009-09-16 13:48:08.000000000 +0200 @@ -4416,14 +4416,14 @@ use_type (rtx *loc, struct count_use_inf expr = REG_EXPR (*loc);
if (!expr) - return MO_USE_NO_VAR; + return cui && DEBUG_INSN_P (cui->insn) ? MO_CLOBBER : MO_USE_NO_VAR; else if (target_for_debug_bind (var_debug_decl (expr))) return MO_CLOBBER; else if (track_loc_p (*loc, expr, REG_OFFSET (*loc), false, modep, NULL)) return MO_USE; else - return MO_USE_NO_VAR; + return cui && DEBUG_INSN_P (cui->insn) ? MO_CLOBBER : MO_USE_NO_VAR; } else if (MEM_P (*loc)) { hack the vars var-tracking doesn't cancel everything immediately, but only after the (insn 19 32 36 2 d6.c:9 (use (reg/i:SI 0 ax)) -1 (nil)) insn - which isn't a debug insn and therefore it is still treated as MO_USE_NO_VAR. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41353