From: Jakub Jelinek Date: Thu, 1 Dec 2011 16:57:07 +0000 (+0100) Subject: re PR rtl-optimization/51014 (ICE: in apply_opt_in_copies, at loop-unroll.c:2283... X-Git-Tag: releases/gcc-4.7.0~1843 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0397b9654739300f9a1e8a76c8cc816d3cb83bc7;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1020e9018c21..6a9c965873b0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-01 Jakub Jelinek + + 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 PR tree-optimization/50802 diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 6deff4141a36..378b933baf05 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index db9afc16709b..acd23f9b589c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-01 Jakub Jelinek + + PR rtl-optimization/51014 + * g++.dg/opt/pr51014.C: New test. + 2011-12-01 Paolo Carlini PR c++/51367 diff --git a/gcc/testsuite/g++.dg/opt/pr51014.C b/gcc/testsuite/g++.dg/opt/pr51014.C new file mode 100644 index 000000000000..1e5bb9f0f14b --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr51014.C @@ -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(); +}