re PR ipa/64565 (ICE: in inline_small_functions, at ipa-inline.c:1664)
PR ipa/64565 * g++.dg/torture/pr64565.C: New testcase. * ipa-inline.c (inline_small_functions): Update callee keys after resolving speculation (inline_small_functions): Always check monotonicity of the queue. From-SVN: r219556
This commit is contained in:
parent
59b8926c6f
commit
2001028ad3
|
@ -1,3 +1,10 @@
|
|||
2015-01-13 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64565
|
||||
* ipa-inline.c (inline_small_functions): Update callee keys after
|
||||
resolving speculation
|
||||
(inline_small_functions): Always check monotonicity of the queue.
|
||||
|
||||
2015-01-13 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR middle-end/64391
|
||||
|
|
|
@ -1626,6 +1626,8 @@ inline_small_functions (void)
|
|||
reset_edge_caches (where);
|
||||
update_caller_keys (&edge_heap, where,
|
||||
updated_nodes, NULL);
|
||||
update_callee_keys (&edge_heap, where,
|
||||
updated_nodes);
|
||||
bitmap_clear (updated_nodes);
|
||||
}
|
||||
}
|
||||
|
@ -1661,7 +1663,7 @@ inline_small_functions (void)
|
|||
/* Disable checking for profile because roundoff errors may cause slight
|
||||
deviations in the order. */
|
||||
gcc_assert (max_count || cached_badness == current_badness);
|
||||
gcc_assert (max_count || current_badness >= badness);
|
||||
gcc_assert (current_badness >= badness);
|
||||
#else
|
||||
current_badness = edge_badness (edge, false);
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-01-13 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64565
|
||||
* g++.dg/torture/pr64565.C: New testcase.
|
||||
|
||||
2015-01-13 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR middle-end/64391
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
/* { dg-do compile } */
|
||||
typedef enum
|
||||
{
|
||||
NS_OK
|
||||
} nsresult;
|
||||
struct A
|
||||
{
|
||||
static int kIID;
|
||||
};
|
||||
class B
|
||||
{
|
||||
};
|
||||
class C
|
||||
{
|
||||
public:
|
||||
C (B p1) { m_fn1 (p1, A::kIID); }
|
||||
void m_fn1 (B, int);
|
||||
};
|
||||
class D;
|
||||
class F
|
||||
{
|
||||
public:
|
||||
F (int);
|
||||
};
|
||||
class G
|
||||
{
|
||||
public:
|
||||
D *operator[](int);
|
||||
};
|
||||
class H
|
||||
{
|
||||
virtual nsresult m_fn2 ();
|
||||
|
||||
public:
|
||||
void m_fn3 ();
|
||||
};
|
||||
class J : H
|
||||
{
|
||||
G mQueries;
|
||||
int mLiveUpdate;
|
||||
nsresult m_fn2 ();
|
||||
};
|
||||
class D
|
||||
{
|
||||
public:
|
||||
nsresult m_fn4 (int);
|
||||
void m_fn5 (int);
|
||||
};
|
||||
class I
|
||||
{
|
||||
public:
|
||||
static I *
|
||||
m_fn6 ()
|
||||
{
|
||||
B __trans_tmp_3;
|
||||
if (!gHistoryService)
|
||||
C serv = __trans_tmp_3;
|
||||
}
|
||||
void m_fn7 ();
|
||||
static I *gHistoryService;
|
||||
};
|
||||
D *Refresh___trans_tmp_2;
|
||||
D Refresh___trans_tmp_6, Refresh___trans_tmp_5;
|
||||
int Refresh_hasDomain;
|
||||
nsresult
|
||||
J::m_fn2 ()
|
||||
{
|
||||
m_fn3 ();
|
||||
I history = *I::m_fn6 ();
|
||||
switch (mLiveUpdate)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
mQueries[0];
|
||||
F query = 0;
|
||||
if (Refresh_hasDomain)
|
||||
return NS_OK;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
Refresh___trans_tmp_2 = mQueries[0];
|
||||
F query = Refresh___trans_tmp_5.m_fn4 (0);
|
||||
history.m_fn7 ();
|
||||
Refresh___trans_tmp_6.m_fn5 (0);
|
||||
}
|
||||
case 3:
|
||||
m_fn2 ();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue