re PR ipa/64978 (ICE: in ipcp_verify_propagated_values, at ipa-cp.c:1060)
PR ipa/64978 * ipa-cp.c (gather_caller_stats): Skip thunks. (propagate_constants_topo): Skip aliases. * g++.dg/torture/pr64978.C: New testcase. From-SVN: r220557
This commit is contained in:
parent
b25d7b91b0
commit
94a2f772f0
4 changed files with 43 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-02-09 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64978
|
||||
* ipa-cp.c (gather_caller_stats): Skip thunks.
|
||||
(propagate_constants_topo): Skip aliases.
|
||||
|
||||
2015-02-09 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
PR target/64761
|
||||
|
|
|
@ -560,10 +560,7 @@ gather_caller_stats (struct cgraph_node *node, void *data)
|
|||
struct cgraph_edge *cs;
|
||||
|
||||
for (cs = node->callers; cs; cs = cs->next_caller)
|
||||
if (cs->caller->thunk.thunk_p)
|
||||
cs->caller->call_for_symbol_thunks_and_aliases (gather_caller_stats,
|
||||
stats, false);
|
||||
else
|
||||
if (!cs->caller->thunk.thunk_p)
|
||||
{
|
||||
stats->count_sum += cs->count;
|
||||
stats->freq_sum += cs->frequency;
|
||||
|
@ -2643,7 +2640,7 @@ propagate_constants_topo (struct ipa_topo_info *topo)
|
|||
for (cs = v->callees; cs; cs = cs->next_callee)
|
||||
if (ipa_edge_within_scc (cs)
|
||||
&& propagate_constants_accross_call (cs))
|
||||
push_node_to_stack (topo, cs->callee);
|
||||
push_node_to_stack (topo, cs->callee->function_symbol ());
|
||||
v = pop_node_from_stack (topo);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-02-08 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64978
|
||||
* g++.dg/torture/pr64978.C: New testcase.
|
||||
|
||||
2015-02-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/64981
|
||||
|
|
30
gcc/testsuite/g++.dg/torture/pr64978.C
Normal file
30
gcc/testsuite/g++.dg/torture/pr64978.C
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* { dg-do compile } */
|
||||
class A {
|
||||
public:
|
||||
A(int, int);
|
||||
};
|
||||
class B {
|
||||
public:
|
||||
void m_fn1(bool, const int *, int &);
|
||||
unsigned m_fn2();
|
||||
};
|
||||
namespace {
|
||||
class C {
|
||||
B &VTables;
|
||||
void m_fn3(A, unsigned, const int *, int &);
|
||||
|
||||
public:
|
||||
int VFTableBuilder_VisitedBases;
|
||||
B VFTableBuilder_VTables;
|
||||
C() : VTables(VFTableBuilder_VTables) {
|
||||
m_fn3(A(0, 0), 0, 0, VFTableBuilder_VisitedBases);
|
||||
}
|
||||
};
|
||||
}
|
||||
int a;
|
||||
void C::m_fn3(A, unsigned, const int *, int &) {
|
||||
for (;;)
|
||||
1 ? VTables.m_fn2() : 0;
|
||||
}
|
||||
void B::m_fn1(bool, const int *, int &) { C(); }
|
||||
unsigned B::m_fn2() { m_fn1(0, 0, a); }
|
Loading…
Add table
Reference in a new issue