mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-23 15:01:17 +08:00
re PR ipa/64378 (ICE: in inline_call, at ipa-inline-transform.c:347 with -O3 -fno-ipa-cp)
PR ipa/64378 * ipa-prop.c (try_make_edge_direct_virtual_call): Clear speculative flag correctly. * ipa-cp.c (ipa_get_indirect_edge_target_1): Handle speculation. * g++.dg/torture/pr64378.C: New testcase. From-SVN: r219822
This commit is contained in:
parent
257024e31e
commit
33c3b6be4d
@ -1,3 +1,10 @@
|
||||
2015-01-18 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64378
|
||||
* ipa-prop.c (try_make_edge_direct_virtual_call): Clear speculative
|
||||
flag correctly.
|
||||
* ipa-cp.c (ipa_get_indirect_edge_target_1): Handle speculation.
|
||||
|
||||
2015-01-18 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* doc/invoke.texi ([-funroll-loops], [-funroll-all-loops]):
|
||||
|
@ -1975,8 +1975,13 @@ ipa_get_indirect_edge_target_1 (struct cgraph_edge *ie,
|
||||
}
|
||||
}
|
||||
else if (t)
|
||||
context = ipa_polymorphic_call_context (t, ie->indirect_info->otr_type,
|
||||
anc_offset);
|
||||
{
|
||||
context = ipa_polymorphic_call_context (t, ie->indirect_info->otr_type,
|
||||
anc_offset);
|
||||
if (ie->indirect_info->vptr_changed)
|
||||
context.possible_dynamic_type_change (ie->in_polymorphic_cdtor,
|
||||
ie->indirect_info->otr_type);
|
||||
}
|
||||
else
|
||||
return NULL_TREE;
|
||||
|
||||
|
@ -2985,7 +2985,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
|
||||
|| !possible_polymorphic_call_target_p
|
||||
(ie, cgraph_node::get (t)))
|
||||
{
|
||||
/* Do not speculate builtin_unreachable, it is stpid! */
|
||||
/* Do not speculate builtin_unreachable, it is stupid! */
|
||||
if (!ie->indirect_info->vptr_changed)
|
||||
target = ipa_impossible_devirt_target (ie, target);
|
||||
}
|
||||
@ -3013,6 +3013,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
|
||||
ctx, &final);
|
||||
if (final && targets.length () <= 1)
|
||||
{
|
||||
speculative = false;
|
||||
if (targets.length () == 1)
|
||||
target = targets[0]->decl;
|
||||
else
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-01-18 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64378
|
||||
* g++.dg/torture/pr64378.C: New testcase.
|
||||
|
||||
2015-01-18 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/57959
|
||||
|
24
gcc/testsuite/g++.dg/torture/pr64378.C
Normal file
24
gcc/testsuite/g++.dg/torture/pr64378.C
Normal file
@ -0,0 +1,24 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-fno-ipa-cp" }
|
||||
struct data {
|
||||
data(int) {}
|
||||
};
|
||||
|
||||
struct top {
|
||||
virtual int topf() {}
|
||||
};
|
||||
|
||||
struct child1: top {
|
||||
void childf()
|
||||
{
|
||||
data d(topf());
|
||||
}
|
||||
};
|
||||
|
||||
void test(top *t)
|
||||
{
|
||||
child1 *c = static_cast<child1 *>(t);
|
||||
c->childf();
|
||||
child1 d;
|
||||
test(&d);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user