From: Per Bothner Date: Thu, 2 Mar 1995 03:33:25 +0000 (-0800) Subject: Remove Feb 28's FUNCTION_NEEDS_STATIC_CHAIN changes. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b001a02f29a98c6363df45d523f21378e0c1e516;p=gcc.git Remove Feb 28's FUNCTION_NEEDS_STATIC_CHAIN changes. From-SVN: r9106 --- diff --git a/gcc/expr.c b/gcc/expr.c index 1ee04801e1a..f72102f3364 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4160,15 +4160,6 @@ expand_expr (exp, target, tmode, modifier) /* Mark as non-local and addressable. */ DECL_NONLOCAL (exp) = 1; - - /* This is currently too late to be useful, since - init_function_start needs to know whether a static chain - is needed. However, it would be a useful optimization - if we could defer setting up static chains and trampolines - until we see that we actually need them due to references - to non-local non-static variables. */ - FUNCTION_NEEDS_STATIC_CHAIN (current_function_decl) = 1; - mark_addressable (exp); if (GET_CODE (DECL_RTL (exp)) != MEM) abort (); @@ -6199,7 +6190,7 @@ expand_expr (exp, target, tmode, modifier) /* Are we taking the address of a nested function? */ if (TREE_CODE (TREE_OPERAND (exp, 0)) == FUNCTION_DECL - && FUNCTION_NEEDS_STATIC_CHAIN (TREE_OPERAND (exp, 0))) + && decl_function_context (TREE_OPERAND (exp, 0)) != 0) { op0 = trampoline_address (TREE_OPERAND (exp, 0)); op0 = force_operand (op0, target); diff --git a/gcc/function.c b/gcc/function.c index edd2bed6113..4ee042b373b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4246,18 +4246,12 @@ rtx lookup_static_chain (decl) tree decl; { - tree context, link; - - if (TREE_CODE (decl) == FUNCTION_DECL - ? ! FUNCTION_NEEDS_STATIC_CHAIN (decl) - : ! FUNCTION_NEEDS_STATIC_CHAIN (current_function_decl)) - return 0; - - context = decl_function_context (decl); + tree context = decl_function_context (decl); + tree link; if (context == 0) return 0; - + /* We treat inline_function_decl as an alias for the current function because that is the inline function whose vars, types, etc. are being merged into the current function. @@ -4713,7 +4707,7 @@ init_function_start (subr, filename, line) /* Nonzero if this is a nested function that uses a static chain. */ current_function_needs_context - = FUNCTION_NEEDS_STATIC_CHAIN (current_function_decl); + = (decl_function_context (current_function_decl) != 0); /* Set if a call to setjmp is seen. */ current_function_calls_setjmp = 0; diff --git a/gcc/tree.c b/gcc/tree.c index ff229ac9e2a..cdbba0ce2a9 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1969,7 +1969,7 @@ staticp (arg) case FUNCTION_DECL: /* Nested functions aren't static, since taking their address involves a trampoline. */ - return ! FUNCTION_NEEDS_STATIC_CHAIN (arg); + return decl_function_context (arg) == 0; case VAR_DECL: return TREE_STATIC (arg) || DECL_EXTERNAL (arg);