re PR rtl-optimization/51014 (ICE: in apply_opt_in_copies, at loop-unroll.c:2283 with -O2 -g -funroll-loops)

PR rtl-optimization/51014
	* loop-unroll.c (apply_opt_in_copies): Ignore label DEBUG_INSNs
	both from bb and orig_bb.

	* g++.dg/opt/pr51014.C: New test.

From-SVN: r181883
This commit is contained in:
Jakub Jelinek 2011-12-01 17:57:07 +01:00 committed by Jakub Jelinek
parent c8218030cc
commit 0397b96547
4 changed files with 35 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2011-12-01 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/51014
* loop-unroll.c (apply_opt_in_copies): Ignore label DEBUG_INSNs
both from bb and orig_bb.
2011-12-01 Joern Rennecke <joern.rennecke@embecosm.com>
PR tree-optimization/50802

View File

@ -1,5 +1,5 @@
/* Loop unrolling and peeling.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2010
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
@ -2262,10 +2262,15 @@ apply_opt_in_copies (struct opt_info *opt_info,
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb)); insn = next)
{
next = NEXT_INSN (insn);
if (!INSN_P (insn))
if (!INSN_P (insn)
|| (DEBUG_INSN_P (insn)
&& TREE_CODE (INSN_VAR_LOCATION_DECL (insn)) == LABEL_DECL))
continue;
while (!INSN_P (orig_insn))
while (!INSN_P (orig_insn)
|| (DEBUG_INSN_P (orig_insn)
&& (TREE_CODE (INSN_VAR_LOCATION_DECL (orig_insn))
== LABEL_DECL)))
orig_insn = NEXT_INSN (orig_insn);
ivts_templ.insn = orig_insn;

View File

@ -1,3 +1,8 @@
2011-12-01 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/51014
* g++.dg/opt/pr51014.C: New test.
2011-12-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51367

View File

@ -0,0 +1,16 @@
// PR rtl-optimization/51014
// { dg-do compile }
// { dg-options "-O2 -funroll-loops -fcompare-debug" }
struct S
{
~S() { delete s; }
int *s;
};
void
f (S *x, S *y)
{
for (; x != y; ++x)
x->~S();
}