Commit a881aaa7 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/48271 (ICE: SIGSEGV in tree_ssa_dominator_optimize…

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
parent dbaa912c
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
* tree-ssa-phiopt.c (cond_if_else_store_replacement): Do
not free datarefs before ddrs.
......
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.
......
// { 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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment