This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/77834] [7 Regression] ICE: in make_decl_rtl, at varasm.c:1311 with -O -ftree-pre -mstringop-strategy=libcall
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 31 Oct 2016 10:38:47 +0000
- Subject: [Bug target/77834] [7 Regression] ICE: in make_decl_rtl, at varasm.c:1311 with -O -ftree-pre -mstringop-strategy=libcall
- Auto-submitted: auto-generated
- References: <bug-77834-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77834
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Apparently on the v_lsm.5 variable we trigger cfgexpand.c (set_rtl)'s
/* If we have something recorded and it's not the same place
as we want to record now, we have multiple partitions for the
same base variable, with different places. We can't just
randomly chose one, hence we have to say that we don't know.
This only happens with optimization, and there var-tracking
will figure out the right thing. */
else if (DECL_RTL (var) != x)
SET_DECL_RTL (var, pc_rtx);
hunk, because set_rtl is once called with
(mem/c:BLK (plus:DI (reg/f:DI 82 virtual-stack-vars)
(const_int -64 [0xffffffffffffffc0])) [1 v_lsm.5+0 S64 A512])
on v_lsm.5_24 and then
(mem/c:BLK (plus:DI (reg/f:DI 82 virtual-stack-vars)
(const_int -128 [0xffffffffffffff80])) [1 v_lsm.5+0 S64 A512])
on v_lsm.5_20 and then in pass_expand::execute
/* If this decl was marked as living in multiple places, reset
this now to NULL. */
tree var = SSA_NAME_VAR (name);
if (var && DECL_RTL_IF_SET (var) == pc_rtx)
SET_DECL_RTL (var, NULL);