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:
Markus Trippelsdorf 2014-11-25 07:41:48 +00:00
parent 02ba3fc22d
commit a5b58b283d
4 changed files with 68 additions and 1 deletions

View File

@ -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

View File

@ -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);

View File

@ -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

View 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 ();
}