OSDN Git Service

* tree-ssa-live.c (remove_unused_scope_block_p): Drop
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Nov 2007 06:24:54 +0000 (06:24 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Nov 2007 06:24:54 +0000 (06:24 +0000)
declarations and blocks only after inlining.  Check that
non-empty blocks are not dropped.
* tree-inline.c (expand_call_inline): Check that functions are
not inlined too late.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130424 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-inline.c
gcc/tree-ssa-live.c

index 46cfbac..7dac519 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-26  Alexandre Oliva  <aoliva@redhat.com>, Jan Hubicka  <jh@suse.cz>
+
+       * tree-ssa-live.c (remove_unused_scope_block_p): Drop
+       declarations and blocks only after inlining.  Check that
+       non-empty blocks are not dropped.
+       * tree-inline.c (expand_call_inline): Check that functions are
+       not inlined too late.
+
 2007-11-26  Ben Elliston  <bje@au.ibm.com>
 
        * unwind-dw2-fde.c: Fix comment typo.
index cb161db..e7fba91 100644 (file)
@@ -2652,6 +2652,8 @@ expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data)
   id->src_cfun = DECL_STRUCT_FUNCTION (fn);
   id->call_expr = t;
 
+  gcc_assert (!id->src_cfun->after_inlining);
+
   initialize_inlined_parameters (id, t, fn, bb);
 
   if (DECL_INITIAL (fn))
index f12de81..51d682c 100644 (file)
@@ -500,8 +500,15 @@ remove_unused_scope_block_p (tree scope)
       /* When we are not doing full debug info, we however can keep around
         only the used variables for cfgexpand's memory packing saving quite
         a lot of memory.  */
-      else if (debug_info_level != DINFO_LEVEL_NORMAL
-              && debug_info_level != DINFO_LEVEL_VERBOSE)
+      else if (debug_info_level == DINFO_LEVEL_NORMAL
+              || debug_info_level == DINFO_LEVEL_VERBOSE
+              /* Removing declarations before inlining is going to affect
+                 DECL_UID that in turn is going to affect hashtables and
+                 code generation.  */
+              || !cfun->after_inlining)
+       unused = false;
+
+      else
        {
          *t = TREE_CHAIN (*t);
          next = t;
@@ -523,7 +530,10 @@ remove_unused_scope_block_p (tree scope)
            nsubblocks ++;
          }
        else
-          *t = BLOCK_CHAIN (*t);
+         {
+           gcc_assert (!BLOCK_VARS (*t));
+           *t = BLOCK_CHAIN (*t);
+         }
       }
     else
       {