]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/45056 (ICE: in refs_may_alias_p_1, at tree-ssa-alias.c:1023)
authorRichard Guenther <rguenther@suse.de>
Mon, 26 Jul 2010 13:29:14 +0000 (13:29 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 26 Jul 2010 13:29:14 +0000 (13:29 +0000)
2010-07-26  Richard Guenther  <rguenther@suse.de>

PR middle-end/45056
* gimple-fold.c (fold_stmt_1): Also fold references in
debug stmts.

* g++.dg/pr45056.C: New testcase.

From-SVN: r162536

gcc/ChangeLog
gcc/gimple-fold.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr45056.C [new file with mode: 0644]

index c03ebf90205d968cd711c906081dfb57fe612913..1b32e5051e0e7b1247981a2f98a4843fb217de9f 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-26  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/45056
+       * gimple-fold.c (fold_stmt_1): Also fold references in
+       debug stmts.
+
 2010-07-26  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/45071
index 5bf82822a903f405abea2b47b1ec59cbe0d36823..5953d6a7593c7f96f01b4d8dd5ebe157bb3ad770 100644 (file)
@@ -1530,6 +1530,23 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace)
        }
       break;
 
+    case GIMPLE_DEBUG:
+      if (gimple_debug_bind_p (stmt))
+       {
+         tree val = gimple_debug_bind_get_value (stmt);
+         if (val
+             && REFERENCE_CLASS_P (val))
+           {
+             tree tem = maybe_fold_reference (val, false);
+             if (tem)
+               {
+                 gimple_debug_bind_set_value (stmt, tem);
+                 changed = true;
+               }
+           }
+       }
+      break;
+
     default:;
     }
 
index f1fde6887e5433fc99be7a031403bf75eaf17686..52d94d2166df11336d06bfddd2ae905cc66aa430 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-26  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/45056
+       * g++.dg/pr45056.C: New testcase.
+
 2010-07-26  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/45071
diff --git a/gcc/testsuite/g++.dg/pr45056.C b/gcc/testsuite/g++.dg/pr45056.C
new file mode 100644 (file)
index 0000000..a69107e
--- /dev/null
@@ -0,0 +1,54 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fschedule-insns2 -fschedule-insns -g" } */
+
+template < class _T1, class _T2 > struct pair
+{
+  _T1 first;
+  _T2 second;
+  pair (_T1 & __a, _T2 & __b)
+      :first (__a), second (__b)   
+    {    }
+}
+;
+template < typename _Tp > struct _Vector_base
+{
+  ~_Vector_base ();
+}
+;
+template < typename _Tp>struct vector
+: _Vector_base < _Tp>
+{
+  template    <    typename     _ForwardIterator >   inline     void _Destroy (_ForwardIterator)   {  }
+  _Tp * _M_finish;
+  ~vector ()
+    {
+      _Destroy         ( this->_M_finish);
+    }
+}   ;
+template < typename ITV > struct Box
+{
+  Box (const Box &);
+  Box ();
+  typedef vector < ITV > Sequence;
+  Sequence seq;
+};
+template < typename D > struct Powerset
+{
+  Powerset (const Powerset &y) :reduced (y.reduced) {}
+  bool reduced;
+} ;
+template < typename PS > struct Pointset_Powerset :Powerset <  int >
+{
+  Pointset_Powerset ();
+  int space_dim;
+} ;
+pair
+<
+Box<int>,
+Pointset_Powerset < int > >
+linear_partition ()
+{
+  Pointset_Powerset < int > r ;
+  Box<int> qq;
+  return pair<Box<int>,Pointset_Powerset < int > >  (qq, r);
+}