https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91683
--- Comment #6 from Jim Wilson <wilson at gcc dot gnu.org> --- (In reply to Richard Biener from comment #4) > Btw, the rtx of pseudos doesn't change, what changes is the address of the > entry in regno_reg_rtx[] which is the pseudo-nr -> rtx map. But I don't see > that involved... do_SUBST_MODE saves the address of the rtx being modified, in this case the address of a pseudo reg. Breakpoint 5, do_SUBST_MODE (into=0x7ffff6280458, newval=E_DImode) at ../../gcc-svn/gcc/combine.c:809 (gdb) print into $5 = (rtx *) 0x7ffff6280458 (gdb) print *into $6 = (rtx) 0x7ffff6287630 (gdb) pr warning: Expression is not an assignment (and might have no effect) (reg:SI 139) (gdb) print regno_reg_rtx[139] $7 = (rtx) 0x7ffff6287630 (gdb) print ®no_reg_rtx[139] $8 = (rtx *) 0x7ffff6280458 (gdb) So into is an address into regno_reg_rtx. When we realloc regno_reg_rtx this changes. Breakpoint 6, emit_status::ensure_regno_capacity (this=0x1a881f0 <x_rtl+48>) at ../../gcc-svn/gcc/emit-rtl.c:1215 (gdb) next 6 (gdb) print regno_reg_rtx[139] $13 = (rtx) 0x7ffff6287630 (gdb) print ®no_reg_rtx[139] $14 = (rtx *) 0x7ffff627b458 (gdb) print $5 $15 = (rtx *) 0x7ffff6280458 (gdb) print *$5 $16 = (rtx) 0xa5a5a5a5a5a5a5a5 (gdb)