+2015-12-10 Richard Biener <rguenther@suse.de>
+
+ PR ipa/68721
+ * ipa-split.c (split_function): Record return value properly
+ when the split part doesn't set it.
+
2015-12-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/68806
to return void instead of just outputting function with undefined return
value. For structures this affects quality of codegen. */
else if (!split_point->split_part_set_retval
- && find_retval (return_bb))
+ && (retval = find_retval (return_bb)))
{
bool redirected = true;
basic_block new_return_bb = create_basic_block (NULL, 0, return_bb);
e->count = new_return_bb->count;
add_bb_to_loop (new_return_bb, current_loops->tree_root);
bitmap_set_bit (split_point->split_bbs, new_return_bb->index);
+ retbnd = find_retbnd (return_bb);
}
/* When we pass around the value, use existing return block. */
else
+2015-12-10 Richard Biener <rguenther@suse.de>
+
+ PR ipa/68721
+ * gcc.dg/torture/pr68721.c: New testcase.
+
2015-12-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/68806
--- /dev/null
+/* { dg-do run } */
+
+extern void abort (void);
+
+int a, b, c, *d, **e = &d;
+
+int *
+fn1 ()
+{
+ for (;;)
+ {
+ for (; a;)
+ if (b)
+ abort ();
+ break;
+ }
+ for (; c;)
+ ;
+ return &a;
+}
+
+int
+main ()
+{
+ *e = fn1 ();
+
+ if (!d)
+ abort ();
+
+ return 0;
+}