aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-04-25 00:06:37 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-04-25 00:06:37 +0200
commit8634c649cb1ea6d85a53f1fab3bd28af869b934f (patch)
treeceb41f874d3b1e3d612a3d2785020f503973c21a /gcc/cp
parent49fc196e8edd206d1cd275cd015238e429056db7 (diff)
downloadgcc-8634c649cb1ea6d85a53f1fab3bd28af869b934f.zip
gcc-8634c649cb1ea6d85a53f1fab3bd28af869b934f.tar.gz
gcc-8634c649cb1ea6d85a53f1fab3bd28af869b934f.tar.bz2
re PR middle-end/20991 (ICE in cgraph_mark_reachable_node)
PR middle-end/20991 * cgraph.h (cgraph_local_info): Add vtable_method field. * varasm.c (mark_decl_referenced): If cgraph_global_info_ready and node is vtable_method, finalized and not reachable, don't do anything. * class.c: Include cgraph.h. (cp_fold_obj_type_ref): Set node->local.vtable_method. * Make-lang.in (cgraph.o): Depend on $(CGRAPH_H). * g++.dg/opt/pr20991.C: New test. From-SVN: r98674
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/Make-lang.in3
-rw-r--r--gcc/cp/class.c3
3 files changed, 12 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a0ebc89..07f7daa 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2005-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/20991
+ * class.c: Include cgraph.h.
+ (cp_fold_obj_type_ref): Set node->local.vtable_method.
+ * Make-lang.in (cgraph.o): Depend on $(CGRAPH_H).
+
2005-04-12 Markus F.X.J. Oberhumer <markus@oberhumer.com>
* mangle.c (write_builtin_type): Handle integer types which are
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 00075b3..eeb4129 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -243,7 +243,8 @@ cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h output.h $(TM_
diagnostic.h gt-cp-typeck2.h
cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
diagnostic.h convert.h c-common.h
-cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) $(TARGET_H) convert.h
+cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) $(TARGET_H) \
+ convert.h $(CGRAPH_H)
cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) $(EXPR_H) \
diagnostic.h intl.h gt-cp-call.h convert.h target.h
cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) toplev.h $(EXPR_H)
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 6423fbc..5052aaaf 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -35,6 +35,7 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "target.h"
#include "convert.h"
+#include "cgraph.h"
/* The number of nested classes being processed. If we are not in the
scope of any class, this is zero. */
@@ -7719,6 +7720,8 @@ cp_fold_obj_type_ref (tree ref, tree known_type)
DECL_VINDEX (fndecl)));
#endif
+ cgraph_node (fndecl)->local.vtable_method = true;
+
return build_address (fndecl);
}