re PR rtl-optimization/51014 (ICE: in apply_opt_in_copies, at loop-unroll.c:2283...
authorJakub Jelinek <jakub@redhat.com>
Thu, 1 Dec 2011 16:57:07 +0000 (17:57 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 1 Dec 2011 16:57:07 +0000 (17:57 +0100)
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

gcc/ChangeLog
gcc/loop-unroll.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr51014.C [new file with mode: 0644]

index 1020e9018c21597c0044c7f487f044079571305e..6a9c965873b0cfb181f12ac14a82787b5dedeac9 100644 (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
index 6deff4141a36eaafa84616d59bd3eeff7e620c76..378b933baf0561bcdb92f3ede84a0414680b091a 100644 (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;
index db9afc16709b2534665614cebc832cbfd92a8a9b..acd23f9b589c5d9fee96eca4455f4faa91f63130 100644 (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
diff --git a/gcc/testsuite/g++.dg/opt/pr51014.C b/gcc/testsuite/g++.dg/opt/pr51014.C
new file mode 100644 (file)
index 0000000..1e5bb9f
--- /dev/null
@@ -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();
+}