From: jakub Date: Mon, 23 Nov 2009 16:10:19 +0000 (+0000) Subject: PR middle-end/42095 X-Git-Tag: upstream/4.9.2~32464 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e815a7959e4746984d2554bdbe955e3733da6d85;p=platform%2Fupstream%2Flinaro-gcc.git 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). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154449 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3f28a94..b40ddb6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2009-11-23 Jakub Jelinek + + 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 PR c++/14777 diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index f5c652e..6e10296 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -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 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index d431b31..17fc495 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -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; }