PR middle-end/42095
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Nov 2009 16:10:19 +0000 (16:10 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Nov 2009 16:10:19 +0000 (16:10 +0000)
* tree.c: Include cgraph.h.
(cp_fix_function_decl_p): Don't return true for same_body aliases.
* Make-lang.in (cp/tree.o): Depend on $(CGRAPH_H).

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

gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/cp/tree.c

index 3f28a94..b40ddb6 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/42095
+       * tree.c: Include cgraph.h.
+       (cp_fix_function_decl_p): Don't return true for same_body aliases.
+       * Make-lang.in (cp/tree.o): Depend on $(CGRAPH_H).
+
 2009-11-23  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/14777
index f5c652e..6e10296 100644 (file)
@@ -281,7 +281,7 @@ cp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h $(FLAGS_H) toplev.h \
 cp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H)
 cp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) \
   insn-config.h $(INTEGRATE_H) $(TREE_INLINE_H) $(REAL_H) gt-cp-tree.h \
-  $(TARGET_H) debug.h $(TREE_FLOW_H)
+  $(TARGET_H) debug.h $(TREE_FLOW_H) $(CGRAPH_H)
 cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(TM_H)
 cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h convert.h \
   $(TARGET_H) $(C_PRAGMA_H) gt-cp-rtti.h
index d431b31..17fc495 100644 (file)
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "target.h"
 #include "convert.h"
 #include "tree-flow.h"
+#include "cgraph.h"
 
 static tree bot_manip (tree *, int *, void *);
 static tree bot_replace (tree *, int *, void *);
@@ -3125,7 +3126,16 @@ cp_fix_function_decl_p (tree decl)
   if (!gimple_has_body_p (decl)
       && !DECL_THUNK_P (decl)
       && !DECL_EXTERNAL (decl))
-    return true;
+    {
+      struct cgraph_node *node = cgraph_get_node (decl);
+
+      /* Don't fix same_body aliases.  Although they don't have their own
+        CFG, they share it with what they alias to.  */
+      if (!node
+         || node->decl == decl
+         || !node->same_body)
+       return true;
+    }
 
   return false;
 }