http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59119
Jeffrey A. Law <law at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2013-11-13
CC| |law at redhat dot com
Assignee|unassigned at gcc dot gnu.org |law at redhat dot com
Ever confirmed|0 |1
--- Comment #1 from Jeffrey A. Law <law at redhat dot com> ---
Thanks Ulrich. I'm pretty sure I know what's going on here. When we remove
statements after the builtin_trap, we remove them in statement order:
;; basic block 3, loop depth 0
;; pred: 2
_8 = (long unsigned int) _6;
memmove (buf_7(D), 0B, _8);
_10 = spec_5(D)->n_prefix;
_11 = (sizetype) _10;
buf_12 = buf_7(D) + _11;
# DEBUG buf => buf_12
In this block we're going to insert a __builtin_trap before the memmove call as
memmove is not allowed to have NULL pointer arguments.
When then proceed to remove the remaining statements in the block starting with
the memmove call proceeding to the end of the block. As we remove statements
with an LHS (such as _11 = ...) we release the SSA name back to the name
manager.
The problem is once released, we're not supposed to touch the names anymore.
But a later remove (say of the statement buf_12 = ... ) may try to insert debug
temps which will look at the RHS of that statement. In particular it'll look
at SSA_NAME 11 which we have already released to the manager.
This should be an easy fix.