re PR ipa/64059 (ICE: Segmentation fault in ipa-polymorphic-call.c:1593)
Fix PR64059 * ipa-prop.c (ipa_analyze_call_uses): Don't call get_dynamic_type when devirtualization is disabled. From-SVN: r218038
This commit is contained in:
parent
02ba3fc22d
commit
a5b58b283d
4 changed files with 68 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-11-25 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64059
|
||||
* ipa-prop.c (ipa_analyze_call_uses): Don't call get_dynamic_type when
|
||||
devirtualization is disabled.
|
||||
|
||||
2014-11-24 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
PR target/63965
|
||||
|
|
|
@ -2155,7 +2155,7 @@ ipa_analyze_call_uses (struct func_body_info *fbi, gcall *call)
|
|||
if (cs && !cs->indirect_unknown_callee)
|
||||
return;
|
||||
|
||||
if (cs->indirect_info->polymorphic)
|
||||
if (cs->indirect_info->polymorphic && flag_devirtualize)
|
||||
{
|
||||
tree instance;
|
||||
tree target = gimple_call_fn (call);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-11-25 Markus Trippelsdorf <markus@trippelsdorf.de>
|
||||
|
||||
PR ipa/64059
|
||||
* g++.dg/ipa/pr64059.C: New test.
|
||||
|
||||
2014-11-24 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/63847
|
||||
|
|
56
gcc/testsuite/g++.dg/ipa/pr64059.C
Normal file
56
gcc/testsuite/g++.dg/ipa/pr64059.C
Normal file
|
@ -0,0 +1,56 @@
|
|||
// { dg-options "-r -nostdlib -O2 -flto -fno-devirtualize" }
|
||||
// { dg-require-effective-target lto }
|
||||
|
||||
class A;
|
||||
class B
|
||||
{
|
||||
public:
|
||||
A *operator->();
|
||||
};
|
||||
class C
|
||||
{
|
||||
public:
|
||||
virtual void m_fn1 ();
|
||||
};
|
||||
class A
|
||||
{
|
||||
public:
|
||||
C *m_fn2 ();
|
||||
};
|
||||
class D
|
||||
{
|
||||
public:
|
||||
void
|
||||
m_fn3 ()
|
||||
{
|
||||
list_m->m_fn2 ()->m_fn1 ();
|
||||
}
|
||||
B list_m;
|
||||
};
|
||||
|
||||
class F
|
||||
{
|
||||
public:
|
||||
D m_fn4 ();
|
||||
};
|
||||
class G
|
||||
{
|
||||
public:
|
||||
F m_fn5 (int, int);
|
||||
};
|
||||
class H
|
||||
{
|
||||
public:
|
||||
void
|
||||
m_fn6 ()
|
||||
{
|
||||
fieldEngine_m.m_fn5 (0, 0).m_fn4 ().m_fn3 ();
|
||||
}
|
||||
G fieldEngine_m;
|
||||
};
|
||||
|
||||
void
|
||||
fn1 (H a)
|
||||
{
|
||||
a.m_fn6 ();
|
||||
}
|
Loading…
Add table
Reference in a new issue