re PR middle-end/71387 (ICE in emit_move_insn, at expr.c:3418 with -Og)
PR middle-end/71387 * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): If redirecting to noreturn e->callee->decl that has void return type and void arguments, adjust gimple_call_fntype and remove lhs even if it had previously addressable type. * g++.dg/opt/pr71387.C: New test. From-SVN: r237053
This commit is contained in:
parent
47b8392308
commit
1f91747b1d
|
@ -1,8 +1,16 @@
|
||||||
|
2016-06-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/71387
|
||||||
|
* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): If redirecting
|
||||||
|
to noreturn e->callee->decl that has void return type and void
|
||||||
|
arguments, adjust gimple_call_fntype and remove lhs even if it had
|
||||||
|
previously addressable type.
|
||||||
|
|
||||||
2016-06-02 Jeff Law <law@redhat.com>
|
2016-06-02 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/71328
|
PR tree-optimization/71328
|
||||||
* tree-ssa-threadupdate.c (duplicate_thread_path): Fix off-by-one
|
* tree-ssa-threadupdate.c (duplicate_thread_path): Fix off-by-one
|
||||||
error when checking for a jump back onto the copied path. */
|
error when checking for a jump back onto the copied path.
|
||||||
|
|
||||||
2016-06-02 David Malcolm <dmalcolm@redhat.com>
|
2016-06-02 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
|
14
gcc/cgraph.c
14
gcc/cgraph.c
|
@ -1512,8 +1512,20 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
|
||||||
update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt);
|
update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If changing the call to __cxa_pure_virtual or similar noreturn function,
|
||||||
|
adjust gimple_call_fntype too. */
|
||||||
|
if (gimple_call_noreturn_p (new_stmt)
|
||||||
|
&& VOID_TYPE_P (TREE_TYPE (TREE_TYPE (e->callee->decl)))
|
||||||
|
&& TYPE_ARG_TYPES (TREE_TYPE (e->callee->decl))
|
||||||
|
&& (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (e->callee->decl)))
|
||||||
|
== void_type_node))
|
||||||
|
gimple_call_set_fntype (new_stmt, TREE_TYPE (e->callee->decl));
|
||||||
|
|
||||||
/* If the call becomes noreturn, remove the LHS if possible. */
|
/* If the call becomes noreturn, remove the LHS if possible. */
|
||||||
if (gimple_call_noreturn_p (new_stmt) && should_remove_lhs_p (lhs))
|
if (lhs
|
||||||
|
&& gimple_call_noreturn_p (new_stmt)
|
||||||
|
&& (VOID_TYPE_P (TREE_TYPE (gimple_call_fntype (new_stmt)))
|
||||||
|
|| should_remove_lhs_p (lhs)))
|
||||||
{
|
{
|
||||||
if (TREE_CODE (lhs) == SSA_NAME)
|
if (TREE_CODE (lhs) == SSA_NAME)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-06-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/71387
|
||||||
|
* g++.dg/opt/pr71387.C: New test.
|
||||||
|
|
||||||
2016-06-02 Jeff Law <law@redhat.com>
|
2016-06-02 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/71328
|
PR tree-optimization/71328
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
// PR middle-end/71387
|
||||||
|
// { dg-do compile }
|
||||||
|
// { dg-options "-Og" }
|
||||||
|
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
A ();
|
||||||
|
inline A (const A &);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct B
|
||||||
|
{
|
||||||
|
explicit B (unsigned long) : b(0), c(1) {}
|
||||||
|
A a;
|
||||||
|
unsigned long b;
|
||||||
|
int c;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct C {};
|
||||||
|
|
||||||
|
struct D
|
||||||
|
{
|
||||||
|
explicit D (const C *) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct E : public D
|
||||||
|
{
|
||||||
|
E (const C *x) : D(x) {}
|
||||||
|
virtual A foo () const = 0;
|
||||||
|
virtual A bar () const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct F : public B
|
||||||
|
{
|
||||||
|
inline void baz ();
|
||||||
|
F (const E *);
|
||||||
|
const E *f;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void
|
||||||
|
F::baz ()
|
||||||
|
{
|
||||||
|
if (b == 0)
|
||||||
|
a = f->bar ();
|
||||||
|
else
|
||||||
|
a = f->foo ();
|
||||||
|
}
|
||||||
|
|
||||||
|
F::F (const E *) : B(4)
|
||||||
|
{
|
||||||
|
baz ();
|
||||||
|
}
|
Loading…
Reference in New Issue