re PR tree-optimization/17724 (wrong dominator (eh/fold all builtins) related)
PR tree-optimization/17724 * tree-cfg.c (tree_purge_dead_eh_edges): Free dominance info. * g++.dg/opt/pr17724-1.C: New test. * g++.dg/opt/pr17724-2.C: New test. * g++.dg/opt/pr17724-3.C: New test. * g++.dg/opt/pr17724-4.C: New test. * g++.dg/opt/pr17724-5.C: New test. * g++.dg/opt/pr17724-6.C: New test. Co-Authored-By: Zdenek Dvorak <dvorakz@suse.cz> From-SVN: r88979
This commit is contained in:
parent
13c62176e5
commit
69d4980288
@ -1,3 +1,9 @@
|
||||
2004-10-13 Jakub Jelinek <jakub@redhat.com>
|
||||
Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/17724
|
||||
* tree-cfg.c (tree_purge_dead_eh_edges): Free dominance info.
|
||||
|
||||
2004-10-13 Dorit Naishlos <dorit@il.ibm.com>
|
||||
|
||||
* rs6000.c (altivec_builtin_mask_for_load): Made static GTY(()).
|
||||
|
@ -1,3 +1,13 @@
|
||||
2004-10-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/17724
|
||||
* g++.dg/opt/pr17724-1.C: New test.
|
||||
* g++.dg/opt/pr17724-2.C: New test.
|
||||
* g++.dg/opt/pr17724-3.C: New test.
|
||||
* g++.dg/opt/pr17724-4.C: New test.
|
||||
* g++.dg/opt/pr17724-5.C: New test.
|
||||
* g++.dg/opt/pr17724-6.C: New test.
|
||||
|
||||
2004-10-12 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
PR c/17301
|
||||
|
23
gcc/testsuite/g++.dg/opt/pr17724-1.C
Normal file
23
gcc/testsuite/g++.dg/opt/pr17724-1.C
Normal file
@ -0,0 +1,23 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
namespace N { char *strcpy (char *, const char *); }
|
||||
extern "C" char *strcpy (char *, const char *) throw ();
|
||||
inline char *N::strcpy (char *s, const char *t) { return ::strcpy (s, t); }
|
||||
|
||||
struct S { ~S (); };
|
||||
int foo ();
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
S s;
|
||||
int a;
|
||||
char b[64];
|
||||
N::strcpy (b, "ABCDEFGHIJKLM");
|
||||
while ((a = foo ()) != -1)
|
||||
if (a)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
23
gcc/testsuite/g++.dg/opt/pr17724-2.C
Normal file
23
gcc/testsuite/g++.dg/opt/pr17724-2.C
Normal file
@ -0,0 +1,23 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
namespace N { char *strcpy (char *, const char *); }
|
||||
extern "C" char *strcpy (char *, const char *);
|
||||
inline char *N::strcpy (char *s, const char *t) { return ::strcpy (s, t); }
|
||||
|
||||
struct S { ~S (); };
|
||||
int foo ();
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
S s;
|
||||
int a;
|
||||
char b[64];
|
||||
N::strcpy (b, "ABCDEFGHIJKLM");
|
||||
while ((a = foo ()) != -1)
|
||||
if (a)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
24
gcc/testsuite/g++.dg/opt/pr17724-3.C
Normal file
24
gcc/testsuite/g++.dg/opt/pr17724-3.C
Normal file
@ -0,0 +1,24 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
extern "C" char *strcpy (char* d, const char* s) throw ();
|
||||
|
||||
class A { public: A (); ~A (); };
|
||||
|
||||
inline char * B (char *s, const char *t)
|
||||
{ return ::strcpy (s, t); }
|
||||
|
||||
class C { int D (void); int E; };
|
||||
|
||||
int C::D (void)
|
||||
{
|
||||
A a;
|
||||
try
|
||||
{
|
||||
char z[22];
|
||||
if (this->E) B (z, "");
|
||||
return 0;
|
||||
}
|
||||
catch (int &f) { return -1; }
|
||||
}
|
24
gcc/testsuite/g++.dg/opt/pr17724-4.C
Normal file
24
gcc/testsuite/g++.dg/opt/pr17724-4.C
Normal file
@ -0,0 +1,24 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
extern "C" char *strcpy (char* d, const char* s);
|
||||
|
||||
class A { public: A (); ~A (); };
|
||||
|
||||
inline char * B (char *s, const char *t)
|
||||
{ return ::strcpy (s, t); }
|
||||
|
||||
class C { int D (void); int E; };
|
||||
|
||||
int C::D (void)
|
||||
{
|
||||
A a;
|
||||
try
|
||||
{
|
||||
char z[22];
|
||||
if (this->E) B (z, "");
|
||||
return 0;
|
||||
}
|
||||
catch (int &f) { return -1; }
|
||||
}
|
24
gcc/testsuite/g++.dg/opt/pr17724-5.C
Normal file
24
gcc/testsuite/g++.dg/opt/pr17724-5.C
Normal file
@ -0,0 +1,24 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
extern char *strcpy (char* d, const char* s) throw ();
|
||||
|
||||
class A { public: A (); ~A (); };
|
||||
|
||||
inline char * B (char *s, const char *t)
|
||||
{ return ::strcpy (s, t); }
|
||||
|
||||
class C { int D (void); int E; };
|
||||
|
||||
int C::D (void)
|
||||
{
|
||||
A a;
|
||||
try
|
||||
{
|
||||
char z[22];
|
||||
if (this->E) B (z, "");
|
||||
return 0;
|
||||
}
|
||||
catch (int &f) { return -1; }
|
||||
}
|
24
gcc/testsuite/g++.dg/opt/pr17724-6.C
Normal file
24
gcc/testsuite/g++.dg/opt/pr17724-6.C
Normal file
@ -0,0 +1,24 @@
|
||||
// PR tree-optimization/17724
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
extern char *strcpy (char* d, const char* s);
|
||||
|
||||
class A { public: A (); ~A (); };
|
||||
|
||||
inline char * B (char *s, const char *t)
|
||||
{ return ::strcpy (s, t); }
|
||||
|
||||
class C { int D (void); int E; };
|
||||
|
||||
int C::D (void)
|
||||
{
|
||||
A a;
|
||||
try
|
||||
{
|
||||
char z[22];
|
||||
if (this->E) B (z, "");
|
||||
return 0;
|
||||
}
|
||||
catch (int &f) { return -1; }
|
||||
}
|
@ -5016,6 +5016,26 @@ tree_purge_dead_eh_edges (basic_block bb)
|
||||
ei_next (&ei);
|
||||
}
|
||||
|
||||
/* Removal of dead EH edges might change dominators of not
|
||||
just immediate successors. E.g. when bb1 is changed so that
|
||||
it no longer can throw and bb1->bb3 and bb1->bb4 are dead
|
||||
eh edges purged by this function in:
|
||||
0
|
||||
/ \
|
||||
v v
|
||||
1-->2
|
||||
/ \ |
|
||||
v v |
|
||||
3-->4 |
|
||||
\ v
|
||||
--->5
|
||||
|
|
||||
-
|
||||
idom(bb5) must be recomputed. For now just free the dominance
|
||||
info. */
|
||||
if (changed)
|
||||
free_dominance_info (CDI_DOMINATORS);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user