+2016-12-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/78692
+ * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Set lhs
+ var to lhs of new_stmt right before noreturn handling rather than to
+ lhs of e->call_stmt early.
+
2016-12-07 David Malcolm <dmalcolm@redhat.com>
* read-md.c (rtx_reader::require_char): New method.
cgraph_edge *e = this;
tree decl = gimple_call_fndecl (e->call_stmt);
- tree lhs = gimple_call_lhs (e->call_stmt);
gcall *new_stmt;
gimple_stmt_iterator gsi;
bool skip_bounds = false;
gimple_call_set_fntype (new_stmt, TREE_TYPE (e->callee->decl));
/* If the call becomes noreturn, remove the LHS if possible. */
+ tree lhs = gimple_call_lhs (new_stmt);
if (lhs
&& gimple_call_noreturn_p (new_stmt)
&& (VOID_TYPE_P (TREE_TYPE (gimple_call_fntype (new_stmt)))
+2016-12-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/78692
+ * g++.dg/torture/pr78692.C: New test.
+
2016-12-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
PR rtl-optimization/78617
--- /dev/null
+// PR c++/78692
+
+int a;
+void *b;
+extern "C" {
+struct C {
+ virtual int d ();
+};
+struct E {
+ virtual int operator () (int, const void *, int) = 0;
+};
+class F {
+ int g ();
+ int h;
+ E &i;
+};
+struct : C, E {
+ int operator () (int, const void *, int) { throw int(); }
+} j;
+
+int
+F::g ()
+{
+ a = i (h, b, 0);
+}
+}