calls.c (expand_call): Don't create a VAR_DECL just to throw it away.
authorMark Mitchell <mark@codesourcery.com>
Tue, 29 Aug 2000 16:23:20 +0000 (16:23 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 29 Aug 2000 16:23:20 +0000 (16:23 +0000)
* calls.c (expand_call): Don't create a VAR_DECL just to throw it
away.
* expr.c (expand_expr, case TARGET_EXPR): Don't call
mark_addressable.
* tree.h (get_file_function_name): Remove two duplicate
declarations.

* typeck.c (mark_addressable): Remove code that pokes around in
RTL.

From-SVN: r36038

gcc/ChangeLog
gcc/calls.c
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/expr.c
gcc/tree.h

index a12a9432405ef32160c978a1664b1bb6018d947b..b054ac6f33b3c59f403b2db1cbeaaf7130889f48 100644 (file)
@@ -1,3 +1,12 @@
+2000-08-29  Mark Mitchell  <mark@codesourcery.com>
+
+       * calls.c (expand_call): Don't create a VAR_DECL just to throw it
+       away.
+       * expr.c (expand_expr, case TARGET_EXPR): Don't call
+       mark_addressable.
+       * tree.h (get_file_function_name): Remove two duplicate
+       declarations.
+
 2000-08-28  Kazu Hirata  <kazu@hxi.com>
 
        * tree.c: Fix formatting.
index 6784bca9fe80dac39602ac7c1f6d82717007595b..605c5ae9393ac331b9f81fbc25f4221bcf95f799 100644 (file)
@@ -2260,8 +2260,7 @@ expand_call (exp, target, ignore)
          structure_value_addr = XEXP (target, 0);
        else
          {
-           /* Assign a temporary to hold the value.  */
-           tree d;
+           rtx d;
 
            /* For variable-sized objects, we must be called with a target
               specified.  If we were to allocate space on the stack here,
@@ -2270,14 +2269,9 @@ expand_call (exp, target, ignore)
            if (struct_value_size < 0)
              abort ();
 
-           /* This DECL is just something to feed to mark_addressable;
-              it doesn't get pushed.  */
-           d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
-           DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
-           mark_addressable (d);
-           mark_temp_addr_taken (DECL_RTL (d));
-           structure_value_addr = XEXP (DECL_RTL (d), 0);
-           TREE_USED (d) = 1;
+           d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
+           mark_temp_addr_taken (d);
+           structure_value_addr = XEXP (d, 0);
            target = 0;
          }
       }
index c9224cfdd7640a8fee55be71751449de5133102c..325872dc80f1c1afe9137ee08141565b9ed6bca4 100644 (file)
@@ -1,3 +1,8 @@
+2000-08-29  Mark Mitchell  <mark@codesourcery.com>
+
+       * typeck.c (mark_addressable): Remove code that pokes around in
+       RTL.
+
 2000-08-28  Jason Merrill  <jason@redhat.com>
 
        * lex.c (file_name_nondirectory): Move to toplev.c.
index 964993d9392f8c29040baacf0ebb5adf825dd2fe..015df0e78ad18a0c9f2e08c4da5027f3e6a536e6 100644 (file)
@@ -4925,19 +4925,6 @@ mark_addressable (exp)
            return 1;
          }
       case VAR_DECL:
-       if (TREE_STATIC (x) && TREE_READONLY (x)
-           && DECL_RTL (x) != 0
-           && ! DECL_IN_MEMORY_P (x))
-         {
-           TREE_ASM_WRITTEN (x) = 0;
-           DECL_RTL (x) = 0;
-           rest_of_decl_compilation (x, 0, 
-                                     !DECL_FUNCTION_SCOPE_P (x),
-                                     0);
-           TREE_ADDRESSABLE (x) = 1;
-
-           return 1;
-         }
        /* Caller should not be trying to mark initialized
           constant fields addressable.  */
        my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0
@@ -4952,8 +4939,6 @@ mark_addressable (exp)
          cp_warning ("address requested for `%D', which is declared `register'",
                      x);
        TREE_ADDRESSABLE (x) = 1;
-       if (cfun && expanding_p)
-         put_var_into_stack (x);
        return 1;
 
       case FUNCTION_DECL:
index a5c306fd3a5389e6cc505cd72b80fb686bb77243..04604e01ea835905b18d5f89edda27a35e2f4176 100644 (file)
@@ -8104,10 +8104,7 @@ expand_expr (exp, target, tmode, modifier)
                preserve_temp_slots (target);
                DECL_RTL (slot) = target;
                if (TREE_ADDRESSABLE (slot))
-                 {
-                   TREE_ADDRESSABLE (slot) = 0;
-                   mark_addressable (slot);
-                 }
+                 put_var_into_stack (slot);
 
                /* Since SLOT is not known to the called function
                   to belong to its stack frame, we must build an explicit
@@ -8145,10 +8142,7 @@ expand_expr (exp, target, tmode, modifier)
                /* If we must have an addressable slot, then make sure that
                   the RTL that we just stored in slot is OK.  */
                if (TREE_ADDRESSABLE (slot))
-                 {
-                   TREE_ADDRESSABLE (slot) = 0;
-                   mark_addressable (slot);
-                 }
+                 put_var_into_stack (slot);
              }
          }
 
index 80bb787b7c9a742ae503196435c0657a25065282..93a54161572e0bf4f8e5e3c11391534bb4edf07e 100644 (file)
@@ -2436,7 +2436,6 @@ extern tree builtin_function                      PARAMS ((const char *, tree, int,
 /* In tree.c */
 extern char *perm_calloc                       PARAMS ((int, long));
 extern void clean_symbol_name                  PARAMS ((char *));
-extern tree get_file_function_name             PARAMS ((int));
 extern tree get_file_function_name_long        PARAMS ((const char *));
 extern tree get_set_constructor_bits           PARAMS ((tree, char *, int));
 extern tree get_set_constructor_bytes          PARAMS ((tree,
@@ -2649,7 +2648,6 @@ extern void preserve_momentary            PARAMS ((void));
 extern void saveable_allocation                PARAMS ((void));
 extern void temporary_allocation       PARAMS ((void));
 extern void resume_temporary_allocation        PARAMS ((void));
-extern tree get_file_function_name     PARAMS ((int));
 extern void set_identifier_size                PARAMS ((int));
 extern int int_fits_type_p             PARAMS ((tree, tree));
 extern int tree_log2                   PARAMS ((tree));