aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2000-11-11 19:11:47 -0500
committerJason Merrill <jason@gcc.gnu.org>2000-11-11 19:11:47 -0500
commitd96a6d1a1c6c53816eef51a447c3e4899dd24df6 (patch)
tree49d6a4beae0ee6bca60387ac0194f98bde8ee221 /gcc
parent5696467825b85328f6b808fdc20c50c1ce97a60d (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/typeck.c3
-rw-r--r--gcc/function.c7
-rw-r--r--gcc/stmt.c5
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
{
diff --git a/gcc/stmt.c b/gcc/stmt.c
index cf0124b..4e42e69 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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