Fix for PR39557
From-SVN: r145119
This commit is contained in:
parent
4577cea1cd
commit
e9d51dc6a3
4 changed files with 67 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2009-03-27 Xinliang David Li <davidxl@google.com>
|
||||
|
||||
PR tree-optimization/39557
|
||||
* tree-ssa.c (warn_uninitialized_vars): free postdom info.
|
||||
|
||||
2009-03-27 Xinliang David Li <davidxl@google.com>
|
||||
|
||||
PR tree-optimization/39548
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-03-27 Xinliang David Li <davidxl@google.com>
|
||||
|
||||
PR tree-optimization/39557
|
||||
* g++.dg/tree-ssa/dom-invalid.C: New test.
|
||||
|
||||
2009-03-27 Xinliang David Li <davidxl@google.com>
|
||||
|
||||
PR tree-optimization/39548
|
||||
|
|
52
gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
Normal file
52
gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
Normal file
|
@ -0,0 +1,52 @@
|
|||
// PR tree-optimization/39557
|
||||
// invalid post-dom info leads to infinite loop
|
||||
// { dg-do run }
|
||||
// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fno-rtti" }
|
||||
|
||||
struct C
|
||||
{
|
||||
virtual const char *bar () const;
|
||||
};
|
||||
|
||||
struct D
|
||||
{
|
||||
D () : d1 (0) { }
|
||||
C *d2[4];
|
||||
int d1;
|
||||
inline const C & baz (int i) const { return *d2[i]; }
|
||||
};
|
||||
|
||||
struct E
|
||||
{
|
||||
unsigned char e1[2];
|
||||
D e2;
|
||||
bool foo () const { return (e1[1] & 1) != 0; }
|
||||
virtual const char *bar () const __attribute__ ((noinline));
|
||||
};
|
||||
|
||||
const char *
|
||||
C::bar () const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
C c;
|
||||
|
||||
const char *
|
||||
E::bar () const
|
||||
{
|
||||
const char *e = __null;
|
||||
if (foo () && (e = c.C::bar ()))
|
||||
return e;
|
||||
for (int i = 0, n = e2.d1; i < n; i++)
|
||||
if ((e = e2.baz (i).C::bar ()))
|
||||
return e;
|
||||
return e;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
E e;
|
||||
e.bar ();
|
||||
} // { dg-message "note: file" "" }
|
|
@ -1589,6 +1589,11 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
|
|||
walk_gimple_op (gsi_stmt (gsi), warn_uninitialized_var, &wi);
|
||||
}
|
||||
}
|
||||
|
||||
/* Post-dominator information can not be reliably updated. Free it
|
||||
after the use. */
|
||||
|
||||
free_dominance_info (CDI_POST_DOMINATORS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue