OSDN Git Service

* toplev.c (finalize): Add no_backend parameter. Don't finish
[pf3gnuchains/gcc-fork.git] / gcc / integrate.c
index 2d0b236..dd75758 100644 (file)
@@ -36,9 +36,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "output.h"
 #include "recog.h"
 #include "integrate.h"
-#include "real.h"
 #include "except.h"
 #include "function.h"
+#include "diagnostic-core.h"
 #include "toplev.h"
 #include "intl.h"
 #include "params.h"
@@ -53,11 +53,11 @@ along with GCC; see the file COPYING3.  If not see
 \f
 
 /* Private type used by {get/has}_hard_reg_initial_val.  */
-typedef struct initial_value_pair GTY(()) {
+typedef struct GTY(()) initial_value_pair {
   rtx hard_reg;
   rtx pseudo;
 } initial_value_pair;
-typedef struct initial_value_struct GTY(()) {
+typedef struct GTY(()) initial_value_struct {
   int num_entries;
   int max_entries;
   initial_value_pair * GTY ((length ("%h.num_entries"))) entries;
@@ -112,7 +112,7 @@ set_block_origin_self (tree stmt)
 
        for (local_decl = BLOCK_VARS (stmt);
             local_decl != NULL_TREE;
-            local_decl = TREE_CHAIN (local_decl))
+            local_decl = DECL_CHAIN (local_decl))
          set_decl_origin_self (local_decl);    /* Potential recursion.  */
       }
 
@@ -148,7 +148,7 @@ set_decl_origin_self (tree decl)
        {
          tree arg;
 
-         for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg))
+         for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
            DECL_ABSTRACT_ORIGIN (arg) = arg;
          if (DECL_INITIAL (decl) != NULL_TREE
              && DECL_INITIAL (decl) != error_mark_node)
@@ -167,14 +167,23 @@ set_block_abstract_flags (tree stmt, int setting)
 {
   tree local_decl;
   tree subblock;
+  unsigned int i;
 
   BLOCK_ABSTRACT (stmt) = setting;
 
   for (local_decl = BLOCK_VARS (stmt);
        local_decl != NULL_TREE;
-       local_decl = TREE_CHAIN (local_decl))
+       local_decl = DECL_CHAIN (local_decl))
     set_decl_abstract_flags (local_decl, setting);
 
+  for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
+    {
+      local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
+      if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
+         || TREE_CODE (local_decl) == PARM_DECL)
+       set_decl_abstract_flags (local_decl, setting);
+    }
+
   for (subblock = BLOCK_SUBBLOCKS (stmt);
        subblock != NULL_TREE;
        subblock = BLOCK_CHAIN (subblock))
@@ -195,7 +204,7 @@ set_decl_abstract_flags (tree decl, int setting)
     {
       tree arg;
 
-      for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg))
+      for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
        DECL_ABSTRACT (arg) = setting;
       if (DECL_INITIAL (decl) != NULL_TREE
          && DECL_INITIAL (decl) != error_mark_node)
@@ -238,10 +247,10 @@ get_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
   ivs = crtl->hard_reg_initial_vals;
   if (ivs == 0)
     {
-      ivs = GGC_NEW (initial_value_struct);
+      ivs = ggc_alloc_initial_value_struct ();
       ivs->num_entries = 0;
       ivs->max_entries = 5;
-      ivs->entries = GGC_NEWVEC (initial_value_pair, 5);
+      ivs->entries = ggc_alloc_vec_initial_value_pair (5);
       crtl->hard_reg_initial_vals = ivs;
     }
 
@@ -334,7 +343,7 @@ allocate_initial_values (rtx *reg_equiv_memory_loc)
        {
          int regno = REGNO (ivs->entries[i].pseudo);
          rtx x = targetm.allocate_initial_value (ivs->entries[i].hard_reg);
-  
+
          if (x && REG_N_SETS (REGNO (ivs->entries[i].pseudo)) <= 1)
            {
              if (MEM_P (x))