From d96a6d1a1c6c53816eef51a447c3e4899dd24df6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 11 Nov 2000 19:11:47 -0500 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/cp/ChangeLog | 4 +++- gcc/cp/typeck.c | 3 +-- gcc/function.c | 7 +++---- gcc/stmt.c | 5 ++++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7dc20bb11bea..c73993445d41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-11-11 Jason Merrill + + * 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 * gcc.texi: Adjust wording. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 12947e1da4cd..1dfd37aa3620 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,4 +1,6 @@ -2000-11-09 Jason Merrill +2000-11-11 Jason Merrill + + * 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 84b648c148a3..06e6deee178e 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 98184eff13b2..ece43d3dc9df 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 cf0124b79771..4e42e6994624 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 -- 2.43.5