Commit 931c8e9a by Jan Hubicka Committed by Jan Hubicka

re PR ipa/65600 (bost testsuite failure: ICE: Segmentation fault)


	PR ipa/65600
	* cgraph.c (cgraph_update_edges_for_call_stmt_node): Fix the case
	of optimized out indirect call.
	(redirect_to_unreachable): Always build symbol table node for
	BUILT_IN_UNREACHABLE
	* g++.dg/torture/pr65600.C: New testcase.

From-SVN: r221735
parent d81c5030
2015-03-27 Jan Hubicka <hubicka@ucw.cz>
PR ipa/65600
* cgraph.c (cgraph_update_edges_for_call_stmt_node): Fix the case
of optimized out indirect call.
(redirect_to_unreachable): Always build symbol table node for
BUILT_IN_UNREACHABLE
2015-03-27 Vladimir Makarov <vmakarov@redhat.com> 2015-03-27 Vladimir Makarov <vmakarov@redhat.com>
PR target/65407 PR target/65407
......
...@@ -1516,7 +1516,7 @@ cgraph_update_edges_for_call_stmt_node (cgraph_node *node, ...@@ -1516,7 +1516,7 @@ cgraph_update_edges_for_call_stmt_node (cgraph_node *node,
if (e) if (e)
{ {
/* Keep calls marked as dead dead. */ /* Keep calls marked as dead dead. */
if (new_call && e->callee if (new_stmt && is_gimple_call (new_stmt) && e->callee
&& DECL_BUILT_IN_CLASS (e->callee->decl) == BUILT_IN_NORMAL && DECL_BUILT_IN_CLASS (e->callee->decl) == BUILT_IN_NORMAL
&& DECL_FUNCTION_CODE (e->callee->decl) == BUILT_IN_UNREACHABLE) && DECL_FUNCTION_CODE (e->callee->decl) == BUILT_IN_UNREACHABLE)
{ {
......
...@@ -766,15 +766,15 @@ static struct cgraph_edge * ...@@ -766,15 +766,15 @@ static struct cgraph_edge *
redirect_to_unreachable (struct cgraph_edge *e) redirect_to_unreachable (struct cgraph_edge *e)
{ {
struct cgraph_node *callee = !e->inline_failed ? e->callee : NULL; struct cgraph_node *callee = !e->inline_failed ? e->callee : NULL;
struct cgraph_node *target = cgraph_node::get_create
(builtin_decl_implicit (BUILT_IN_UNREACHABLE));
if (e->speculative) if (e->speculative)
e = e->resolve_speculation (builtin_decl_implicit (BUILT_IN_UNREACHABLE)); e = e->resolve_speculation (target->decl);
else if (!e->callee) else if (!e->callee)
e->make_direct (cgraph_node::get_create e->make_direct (target);
(builtin_decl_implicit (BUILT_IN_UNREACHABLE)));
else else
e->redirect_callee (cgraph_node::get_create e->redirect_callee (target);
(builtin_decl_implicit (BUILT_IN_UNREACHABLE)));
struct inline_edge_summary *es = inline_edge_summary (e); struct inline_edge_summary *es = inline_edge_summary (e);
e->inline_failed = CIF_UNREACHABLE; e->inline_failed = CIF_UNREACHABLE;
e->frequency = 0; e->frequency = 0;
......
2015-03-27 Jan Hubicka <hubicka@ucw.cz>
PR ipa/65600
* g++.dg/torture/pr65600.C: New testcase.
2015-03-27 Vladimir Makarov <vmakarov@redhat.com> 2015-03-27 Vladimir Makarov <vmakarov@redhat.com>
PR target/65407 PR target/65407
......
// { dg-do compile }
// { dg-options "-std=c++11" }
class A {
public:
virtual void m_fn1() {}
int weak_release___trans_tmp_1;
void m_fn2() {
__asm__("\n\n\n\n");
if (weak_release___trans_tmp_1)
m_fn1();
}
};
class weak_count {
A *pi_;
public:
weak_count() : pi_() {}
~weak_count() {
if (pi_)
pi_->m_fn2();
}
};
class B {
weak_count pn;
};
int
main() { B a; }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment