Commit 80b6ba28 by Jan Hubicka Committed by Jan Hubicka

re PR tree-optimization/62091 (ice in before_dom_children)


	PR tree-optimization/62091
	* g++.dg/ipa/devirt-38.C: New testcase.
	* tree-ssa-alias.c (walk_aliased_vdefs_1): Do not clear
	function_entry_reached.
	(walk_aliased_vdefs): Clear it here.
	* ipa-devirt.c (check_stmt_for_type_change): Handle static storage.

From-SVN: r213991
parent 56b1f114
2014-08-14 Jan Hubicka <hubicka@ucw.cz> 2014-08-14 Jan Hubicka <hubicka@ucw.cz>
PR tree-optimization/62091
* tree-ssa-alias.c (walk_aliased_vdefs_1): Do not clear
function_entry_reached.
(walk_aliased_vdefs): Clear it here.
* ipa-devirt.c (check_stmt_for_type_change): Handle static storage.
2014-08-14 Jan Hubicka <hubicka@ucw.cz>
* ipa-utils.h (compare_virtual_tables): Declare. * ipa-utils.h (compare_virtual_tables): Declare.
* ipa-devirt.c (odr_subtypes_equivalent_p): New function * ipa-devirt.c (odr_subtypes_equivalent_p): New function
......
...@@ -2777,6 +2777,8 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data) ...@@ -2777,6 +2777,8 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
* BITS_PER_UNIT; * BITS_PER_UNIT;
op = TREE_OPERAND (op, 0); op = TREE_OPERAND (op, 0);
} }
else if (DECL_P (op))
;
else else
{ {
tci->speculative = true; tci->speculative = true;
......
2014-08-14 Jan Hubicka <hubicka@ucw.cz>
PR tree-optimization/62091
* g++.dg/ipa/devirt-38.C: New testcase.
2014-08-14 Marek Polacek <polacek@redhat.com> 2014-08-14 Marek Polacek <polacek@redhat.com>
DR 458 DR 458
......
/* { dg-do compile } */
/* { dg-options "-O2" } */
class SnmpSyntax
{
public:
virtual SnmpSyntax *m_fn1 () const;
~SnmpSyntax () {}
virtual SnmpSyntax &operator=(const SnmpSyntax &);
};
class A : public SnmpSyntax
{
public:
A (int);
SnmpSyntax *m_fn1 () const {}
SnmpSyntax &operator=(const SnmpSyntax &);
};
int a;
void fn1 ()
{
for (;; a++)
switch (0)
case 0:
{
A b (0);
SnmpSyntax &c = b;
c.m_fn1 ();
}
}
// Devirtualization to A::m_fn1 would be possible, but we can not do it at the moment
...@@ -2658,8 +2658,6 @@ walk_aliased_vdefs_1 (ao_ref *ref, tree vdef, ...@@ -2658,8 +2658,6 @@ walk_aliased_vdefs_1 (ao_ref *ref, tree vdef,
bitmap *visited, unsigned int cnt, bitmap *visited, unsigned int cnt,
bool *function_entry_reached) bool *function_entry_reached)
{ {
if (function_entry_reached)
*function_entry_reached = false;
do do
{ {
gimple def_stmt = SSA_NAME_DEF_STMT (vdef); gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
...@@ -2709,6 +2707,9 @@ walk_aliased_vdefs (ao_ref *ref, tree vdef, ...@@ -2709,6 +2707,9 @@ walk_aliased_vdefs (ao_ref *ref, tree vdef,
timevar_push (TV_ALIAS_STMT_WALK); timevar_push (TV_ALIAS_STMT_WALK);
if (function_entry_reached)
*function_entry_reached = false;
ret = walk_aliased_vdefs_1 (ref, vdef, walker, data, ret = walk_aliased_vdefs_1 (ref, vdef, walker, data,
visited ? visited : &local_visited, 0, visited ? visited : &local_visited, 0,
function_entry_reached); function_entry_reached);
......
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