re PR middle-end/26004 (gcc errors on valid code [SVO])
PR c/26004 * gimplify.c (gimplify_modify_expr_rhs): Don't do return slot opt if the target was declared 'register'. From-SVN: r111947
This commit is contained in:
parent
e16187d98d
commit
21f9ec0c6a
3 changed files with 19 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-03-10 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c/26004
|
||||
* gimplify.c (gimplify_modify_expr_rhs): Don't do return slot opt if
|
||||
the target was declared 'register'.
|
||||
|
||||
2006-03-10 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* genpreds.c (write_insn_constraint_len): Change definition of
|
||||
|
|
|
@ -3295,7 +3295,8 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p,
|
|||
&& needs_to_live_in_memory (*to_p))
|
||||
/* It's OK to use the return slot directly unless it's an NRV. */
|
||||
use_target = true;
|
||||
else if (is_gimple_reg_type (TREE_TYPE (*to_p)))
|
||||
else if (is_gimple_reg_type (TREE_TYPE (*to_p))
|
||||
|| (DECL_P (*to_p) && DECL_REGISTER (*to_p)))
|
||||
/* Don't force regs into memory. */
|
||||
use_target = false;
|
||||
else if (TREE_CODE (*to_p) == VAR_DECL
|
||||
|
|
11
gcc/testsuite/gcc.dg/pr26004.c
Normal file
11
gcc/testsuite/gcc.dg/pr26004.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* PR c/26004 */
|
||||
/* Bug: the return slot optimization was taking the address of s_3,
|
||||
causing an error. */
|
||||
|
||||
struct s_3 { short s[3]; } z_3, s_3;
|
||||
struct s_3 add_struct_3 (struct s_3 s){}
|
||||
wack_struct_3 (void)
|
||||
{
|
||||
int i; register struct s_3 u = z_3;
|
||||
u = add_struct_3 (u);
|
||||
}
|
Loading…
Add table
Reference in a new issue