diff options
author | Jason Merrill <jason@redhat.com> | 2000-11-11 19:11:47 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2000-11-11 19:11:47 -0500 |
commit | d96a6d1a1c6c53816eef51a447c3e4899dd24df6 (patch) | |
tree | 49d6a4beae0ee6bca60387ac0194f98bde8ee221 | |
parent | 5696467825b85328f6b808fdc20c50c1ce97a60d (diff) | |
download | gcc-d96a6d1a1c6c53816eef51a447c3e4899dd24df6.zip gcc-d96a6d1a1c6c53816eef51a447c3e4899dd24df6.tar.gz gcc-d96a6d1a1c6c53816eef51a447c3e4899dd24df6.tar.bz2 |
function.c (assign_parms): If TREE_ADDRESSABLE is set...
* function.c (assign_parms): If TREE_ADDRESSABLE is set, try to
give the parm a register and then call put_var_into_stack.
* stmt.c (expand_decl): Likewise.
cp/
* typeck.c (mark_addressable): Don't call put_var_into_stack.
From-SVN: r37396
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 3 | ||||
-rw-r--r-- | gcc/function.c | 7 | ||||
-rw-r--r-- | gcc/stmt.c | 5 |
5 files changed, 17 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7dc20bb..c739934 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-11-11 Jason Merrill <jason@redhat.com> + + * function.c (assign_parms): If TREE_ADDRESSABLE is set, try to + give the parm a register and then call put_var_into_stack. + * stmt.c (expand_decl): Likewise. + 2000-11-11 Joseph S. Myers <jsm28@cam.ac.uk> * gcc.texi: Adjust wording. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 12947e1..1dfd37a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,4 +1,6 @@ -2000-11-09 Jason Merrill <jason@redhat.com> +2000-11-11 Jason Merrill <jason@redhat.com> + + * typeck.c (mark_addressable): Don't call put_var_into_stack. * decl.c (maybe_commonize_var): Set DECL_UNINLINABLE for statics in inlines. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 84b648c..06e6dee 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4904,7 +4904,6 @@ mark_addressable (exp) if (! flag_this_is_variable) error ("cannot take the address of `this', which is an ravlue expression"); TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later */ - put_var_into_stack (x); return 1; } case VAR_DECL: @@ -6797,7 +6796,7 @@ check_return_expr (retval) /* First convert the value to the function's return type, then to the type of return value's location to handle the - case that functype is thiner than the valtype. */ + case that functype is smaller than the valtype. */ retval = convert_for_initialization (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING, "return", NULL_TREE, 0); diff --git a/gcc/function.c b/gcc/function.c index 98184ef..ece43d3 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4610,8 +4610,6 @@ assign_parms (fndecl) else if (! ((! optimize && ! DECL_REGISTER (parm) && ! DECL_INLINE (fndecl)) - /* layout_decl may set this. */ - || TREE_ADDRESSABLE (parm) || TREE_SIDE_EFFECTS (parm) /* If -ffloat-store specified, don't put explicit float variables into registers. */ @@ -4695,8 +4693,6 @@ assign_parms (fndecl) && ! ((! optimize && ! DECL_REGISTER (parm) && ! DECL_INLINE (fndecl)) - /* layout_decl may set this. */ - || TREE_ADDRESSABLE (parm) || TREE_SIDE_EFFECTS (parm) /* If -ffloat-store specified, don't put explicit float variables into registers. */ @@ -4865,6 +4861,9 @@ assign_parms (fndecl) mark_reg_pointer (parmreg, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm)))); + /* If something wants our address, try to use ADDRESSOF. */ + if (TREE_ADDRESSABLE (parm)) + put_var_into_stack (parm); } else { @@ -3837,7 +3837,6 @@ expand_decl (decl) && !(flag_float_store && TREE_CODE (type) == REAL_TYPE) && ! TREE_THIS_VOLATILE (decl) - && ! TREE_ADDRESSABLE (decl) && (DECL_REGISTER (decl) || optimize) /* if -fcheck-memory-usage, check all variables. */ && ! current_function_check_memory_usage) @@ -3855,6 +3854,10 @@ expand_decl (decl) TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl)))); maybe_set_unchanging (DECL_RTL (decl), decl); + + /* If something wants our address, try to use ADDRESSOF. */ + if (TREE_ADDRESSABLE (decl)) + put_var_into_stack (decl); } else if (TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST |