mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 20:41:10 +08:00
re PR tree-optimization/48271 (ICE: SIGSEGV in tree_ssa_dominator_optimize (tree-ssa-dom.c:2964) with -O -ftree-vrp -fno-guess-branch-probability -fnon-call-exceptions)
2011-03-24 Richard Guenther <rguenther@suse.de> PR tree-optimization/48271 * tree-ssa-dom.c (tree_ssa_dominator_optimize): Only cleanup blocks that still exist. * g++.dg/torture/pr48271.C: New testcase. From-SVN: r171395
This commit is contained in:
parent
dbaa912cc8
commit
a881aaa769
@ -1,3 +1,9 @@
|
||||
2011-03-24 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/48271
|
||||
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Only cleanup
|
||||
blocks that still exist.
|
||||
|
||||
2011-03-24 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/48270
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-03-24 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/48271
|
||||
* g++.dg/torture/pr48271.C: New testcase.
|
||||
|
||||
2011-03-24 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/array15.ad[sb]: New test.
|
||||
|
119
gcc/testsuite/g++.dg/torture/pr48271.C
Normal file
119
gcc/testsuite/g++.dg/torture/pr48271.C
Normal file
@ -0,0 +1,119 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-ftree-vrp -fno-guess-branch-probability -fnon-call-exceptions" }
|
||||
|
||||
void *xalloc ();
|
||||
void xfree (void *);
|
||||
void error ();
|
||||
|
||||
static inline void *
|
||||
MallocT ()
|
||||
{
|
||||
void *p = xalloc ();
|
||||
if (!p)
|
||||
error ();
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
struct ByteBlob
|
||||
{
|
||||
int *header;
|
||||
|
||||
ByteBlob();
|
||||
|
||||
~ByteBlob ()
|
||||
{
|
||||
Free ();
|
||||
}
|
||||
|
||||
int RawFree (int * p)
|
||||
{
|
||||
if (!p)
|
||||
error ();
|
||||
xfree (p);
|
||||
}
|
||||
|
||||
int *LengthRef ();
|
||||
|
||||
void Free ()
|
||||
{
|
||||
if (*header)
|
||||
RawFree (header);
|
||||
}
|
||||
|
||||
int Append (int num_ints)
|
||||
{
|
||||
if (*header)
|
||||
MallocT ();
|
||||
*LengthRef () += num_ints;
|
||||
}
|
||||
};
|
||||
|
||||
struct CBlobT:ByteBlob
|
||||
{
|
||||
~CBlobT ()
|
||||
{
|
||||
Free ();
|
||||
}
|
||||
};
|
||||
|
||||
template < class T > struct FixedSizeArray
|
||||
{
|
||||
int HeaderSize;
|
||||
T *data;
|
||||
FixedSizeArray ();
|
||||
int RefCnt ()
|
||||
{
|
||||
return *(int *) MallocT ();
|
||||
}
|
||||
~FixedSizeArray ()
|
||||
{
|
||||
if (RefCnt ())
|
||||
for (T * pItem = data + Length (); pItem != data; pItem--)
|
||||
T ();
|
||||
}
|
||||
int Length ();
|
||||
};
|
||||
|
||||
class SmallArray
|
||||
{
|
||||
typedef FixedSizeArray < int > SubArray;
|
||||
typedef FixedSizeArray < SubArray > SuperArray;
|
||||
SuperArray data;
|
||||
};
|
||||
|
||||
struct CHashTableT
|
||||
{
|
||||
int *m_slots;
|
||||
~CHashTableT ()
|
||||
{
|
||||
delete m_slots;
|
||||
}
|
||||
};
|
||||
|
||||
struct CYapfBaseT
|
||||
{
|
||||
int *PfGetSettings ();
|
||||
SmallArray m_arr;
|
||||
CHashTableT m_closed;
|
||||
CYapfBaseT ()
|
||||
{
|
||||
MallocT ();
|
||||
}
|
||||
};
|
||||
|
||||
struct CYapfCostRailT:CYapfBaseT
|
||||
{
|
||||
CBlobT m_sig_look_ahead_costs;
|
||||
CYapfCostRailT ()
|
||||
{
|
||||
m_sig_look_ahead_costs.Append (*Yapf ()->PfGetSettings ());
|
||||
Yapf ()->PfGetSettings ();
|
||||
}
|
||||
CYapfBaseT *Yapf ();
|
||||
};
|
||||
|
||||
void stCheckReverseTrain ()
|
||||
{
|
||||
CYapfCostRailT pf1;
|
||||
}
|
@ -701,7 +701,8 @@ tree_ssa_dominator_optimize (void)
|
||||
gimple_stmt_iterator gsi;
|
||||
basic_block bb;
|
||||
FOR_EACH_BB (bb)
|
||||
{for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
{
|
||||
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
update_stmt_if_modified (gsi_stmt (gsi));
|
||||
}
|
||||
}
|
||||
@ -734,7 +735,8 @@ tree_ssa_dominator_optimize (void)
|
||||
EXECUTE_IF_SET_IN_BITMAP (need_eh_cleanup, 0, i, bi)
|
||||
{
|
||||
basic_block bb = BASIC_BLOCK (i);
|
||||
if (single_succ_p (bb) == 1
|
||||
if (bb
|
||||
&& single_succ_p (bb)
|
||||
&& (single_succ_edge (bb)->flags & EDGE_EH) == 0)
|
||||
{
|
||||
bitmap_clear_bit (need_eh_cleanup, i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user