2012-01-13 Richard Guenther <rguenther@suse.de>
PR middle-end/8081
* gimplify.c (gimplify_modify_expr_rhs): For calls with a
variable-sized result always use RSO.
* gcc.dg/torture/pr8081.c: New testcase.
From-SVN: r183153
+2012-01-13 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/8081
+ * gimplify.c (gimplify_modify_expr_rhs): For calls with a
+ variable-sized result always use RSO.
+
2012-01-12 DJ Delorie <dj@redhat.com>
* cfgexpand.c (convert_debug_memory_address): Allow any valid
/* It's OK to use the target directly if it's being
initialized. */
use_target = true;
+ else if (variably_modified_type_p (TREE_TYPE (*to_p), NULL_TREE))
+ /* Always use the target and thus RSO for variable-sized types.
+ GIMPLE cannot deal with a variable-sized assignment
+ embedded in a call statement. */
+ use_target = true;
else if (TREE_CODE (*to_p) != SSA_NAME
&& (!is_gimple_variable (*to_p)
|| needs_to_live_in_memory (*to_p)))
+2012-01-13 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/8081
+ * gcc.dg/torture/pr8081.c: New testcase.
+
2012-01-13 Georg-Johann Lay <avr@gjlay.de>
* gcc.dg/pr46309.c: Set branch cost to greater 1 for avr.
--- /dev/null
+/* { dg-do run } */
+
+extern void abort (void);
+int
+main (int argc, char **argv)
+{
+ int size = 10;
+ typedef struct
+ {
+ char val[size];
+ }
+ block;
+ block a, b;
+ block __attribute__((noinline))
+ retframe_block ()
+ {
+ return *(block *) &b;
+ }
+ b.val[0] = -1;
+ b.val[9] = -2;
+ a=retframe_block ();
+ if (a.val[0] != -1
+ || a.val[9] != -2)
+ abort ();
+ return 0;
+}