This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/54876] New: [4.8 Regression] LTO bootstrap broken, streaming garbage-collected BLOCK
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 09 Oct 2012 15:20:47 +0000
- Subject: [Bug bootstrap/54876] New: [4.8 Regression] LTO bootstrap broken, streaming garbage-collected BLOCK
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54876
Bug #: 54876
Summary: [4.8 Regression] LTO bootstrap broken, streaming
garbage-collected BLOCK
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: bootstrap
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: rguenth@gcc.gnu.org
CC: dehao@gcc.gnu.org, jamborm@gcc.gnu.org
We are streaming a GCed TREE_BLOCK of
(gdb) p expr->base.code
$5 = MEM_REF
(gdb) p expr->base.code
$6 = ADDR_EXPR
from output_node_opt_summary here:
/* At the moment we assume all old trees to be PARM_DECLs, because we
have no
mechanism to store function local declarations into summaries. */
gcc_assert (parm);
streamer_write_uhwi (ob, parm_num);
gcc_assert (EXPR_LOCATION (map->new_tree) == UNKNOWN_LOCATION);
stream_write_tree (ob, map->new_tree, true);
we need to clear all TREE_BLOCKs from this. Not sure if new_tree originates
from a tree that eventually comes along prune_expression_for_jf, but
static tree
prune_expression_for_jf (tree exp)
{
if (EXPR_P (exp))
{
exp = unshare_expr (exp);
SET_EXPR_LOCATION (exp, UNKNOWN_LOCATION);
}
return exp;
}
is not enough. You need to walk_tree exp, as in this case it is &MEM_REF
and all sub-expressions can contain a location.