re PR debug/52048 (-fcompare-debug failure with -O2 -fcompare-debug -fnon-call-exceptions -fno-tree-dominator-opts)

PR debug/52048
	* tree-ssa-tail-merge.c (local_def): Ignore debug uses.

	* g++.dg/other/pr52048.C: New test.

From-SVN: r183723
This commit is contained in:
Jakub Jelinek 2012-01-30 14:47:38 +01:00 committed by Jakub Jelinek
parent ab448cfa68
commit dd44dcb022
4 changed files with 91 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2012-01-30 Jakub Jelinek <jakub@redhat.com>
PR debug/52048
* tree-ssa-tail-merge.c (local_def): Ignore debug uses.
2012-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52045

View file

@ -1,3 +1,8 @@
2012-01-30 Jakub Jelinek <jakub@redhat.com>
PR debug/52048
* g++.dg/other/pr52048.C: New test.
2012-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52045

View file

@ -0,0 +1,79 @@
// PR debug/52048
// { dg-do compile }
// { dg-options "-fcompare-debug -fnon-call-exceptions -fno-tree-dominator-opts -O2" }
template <typename T> struct A;
template <typename T>
struct A <T *>
{
typedef T &a;
};
template <typename T>
struct B
{
typedef typename A <T>::a a;
a operator *() {}
};
template <typename T, typename U>
bool operator != (B <T>, B <U>)
{
}
template <typename T>
struct C
{
typedef T *c;
template <typename>
struct D { typedef C d; };
};
template <typename T, typename U> struct E
{
typedef typename U::template D <T>::d e;
};
template <typename T, typename U = C <T> >
struct F
{
typedef E <T, U> b;
typedef typename b::e e;
typedef typename e::c c;
typedef B <c> i;
i begin ();
i end ();
};
class G;
class H;
struct I
{
void *i;
template <typename T> T foo ();
};
struct J : public I
{
virtual bool bar ();
};
class K {};
struct L
{
bool baz () {}
};
struct M
{
K m1 (K);
K m2 (H *) {}
};
struct N : J
{
bool bar (G &);
};
bool
N::bar (G &)
{
M m = foo <M> ();
F <H *> f;
for (F <H *>::i I = f.begin (), E = f.end (); I != E;)
{
H *h = *I;
L l;
if (l.baz ())
m.m1 (m.m2 (h));
}
}

View file

@ -371,6 +371,8 @@ local_def (tree val)
res = true;
FOR_EACH_IMM_USE_STMT (stmt, iter, val)
{
if (is_gimple_debug (stmt))
continue;
bb = gimple_bb (stmt);
if (bb == def_bb)
continue;