Remove Feb 28's FUNCTION_NEEDS_STATIC_CHAIN changes.
authorPer Bothner <bothner@gcc.gnu.org>
Thu, 2 Mar 1995 03:33:25 +0000 (19:33 -0800)
committerPer Bothner <bothner@gcc.gnu.org>
Thu, 2 Mar 1995 03:33:25 +0000 (19:33 -0800)
From-SVN: r9106

gcc/expr.c
gcc/function.c
gcc/tree.c

index 1ee04801e1abfc92ae2540f49b8da04270424cbd..f72102f3364885ae28a54f34f0d82ceb9bb02c82 100644 (file)
@@ -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);
index edd2bed6113b53a14ca6e6a8df84253a6937f621..4ee042b373b540e61f7a725a9ca77fcb0079d51b 100644 (file)
@@ -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;
index ff229ac9e2a3ecf63e1cdb9228ce2b57c760aaab..cdbba0ce2a92943317e33b5e04607f1f980daa89 100644 (file)
@@ -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);