From 16ae29f1e617a0d0cc43d59b3082faf54bc436bb Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 15 Sep 2004 09:43:52 +0000 Subject: [PATCH] cp-tree.h (struct lang_decl_flags): Remove needs_final_overrider. * cp-tree.h (struct lang_decl_flags): Remove needs_final_overrider. (DECL_NEEDS_FINAL_OVERRIDER_P): Remove. * decl.c (duplicate_decls): Do not copy DECL_NEEDS_FINAL_OVERRIDER_P. * class.c (finish_struct_bits): Correct comment about CLASSTYPE_PURE_VIRTUALS. * search.c (get_pure_virtuals): Remove useless loop. From-SVN: r87541 --- gcc/cp/ChangeLog | 10 ++++++++++ gcc/cp/class.c | 6 +++--- gcc/cp/cp-tree.h | 10 ++-------- gcc/cp/decl.c | 1 - gcc/cp/search.c | 14 -------------- 5 files changed, 15 insertions(+), 26 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e623148e275..a2bdd496aae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2004-09-15 Nathan Sidwell + + * cp-tree.h (struct lang_decl_flags): Remove + needs_final_overrider. + (DECL_NEEDS_FINAL_OVERRIDER_P): Remove. + * decl.c (duplicate_decls): Do not copy DECL_NEEDS_FINAL_OVERRIDER_P. + * class.c (finish_struct_bits): Correct comment about + CLASSTYPE_PURE_VIRTUALS. + * search.c (get_pure_virtuals): Remove useless loop. + 2004-09-14 Mark Mitchell PR c++/17324 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 999551b435d..d31295a87a6 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1439,8 +1439,8 @@ finish_struct_bits (tree t) } if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t)) - /* For a class w/o baseclasses, `finish_struct' has set - CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by definition). + /* For a class w/o baseclasses, 'finish_struct' has set + CLASSTYPE_PURE_VIRTUALS correctly (by definition). Similarly for a class whose base classes do not have vtables. When neither of these is true, we might have removed abstract virtuals (by providing a definition), added some (by declaring @@ -1448,7 +1448,7 @@ finish_struct_bits (tree t) recalculate what's really an abstract virtual at this point (by looking in the vtables). */ get_pure_virtuals (t); - + /* If this type has a copy constructor or a destructor, force its mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be nonzero. This will cause it to be passed by invisible reference diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index aa25658c185..5d788af0d1b 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1522,16 +1522,15 @@ struct lang_decl_flags GTY(()) unsigned use_template : 2; unsigned nonconverting : 1; unsigned not_really_extern : 1; - unsigned needs_final_overrider : 1; unsigned initialized_in_class : 1; unsigned assignment_operator_p : 1; - unsigned u1sel : 1; + unsigned u2sel : 1; unsigned can_be_full : 1; unsigned this_thunk_p : 1; unsigned repo_available_p : 1; - unsigned dummy : 3; + unsigned dummy : 4; union lang_decl_u { /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is @@ -1883,11 +1882,6 @@ struct lang_decl GTY(()) #define DECL_PURE_VIRTUAL_P(NODE) \ (DECL_LANG_SPECIFIC (NODE)->decl_flags.pure_virtual) -/* Nonzero for FUNCTION_DECL means that this member function - must be overridden by derived classes. */ -#define DECL_NEEDS_FINAL_OVERRIDER_P(NODE) \ - (DECL_LANG_SPECIFIC (NODE)->decl_flags.needs_final_overrider) - /* True (in a FUNCTION_DECL) if NODE is a virtual function that is an invalid overrider for a function from a base class. Once we have complained about an invalid overrider we avoid complaining about it diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 97b5a1a0357..6128598f8b8 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1582,7 +1582,6 @@ duplicate_decls (tree newdecl, tree olddecl) DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl); DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl); DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl); - DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl); DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl); if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK) SET_OVERLOADED_OPERATOR_CODE diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 906491ed02c..99a945352e1 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1908,20 +1908,6 @@ get_pure_virtuals (tree type) /* Put the pure virtuals in dfs order. */ CLASSTYPE_PURE_VIRTUALS (type) = nreverse (CLASSTYPE_PURE_VIRTUALS (type)); - - for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0; - VEC_iterate (tree, vbases, ix, binfo); ix++) - { - tree virtuals; - - for (virtuals = BINFO_VIRTUALS (binfo); virtuals; - virtuals = TREE_CHAIN (virtuals)) - { - tree base_fndecl = BV_FN (virtuals); - if (DECL_NEEDS_FINAL_OVERRIDER_P (base_fndecl)) - error ("`%#D' needs a final overrider", base_fndecl); - } - } } /* DEPTH-FIRST SEARCH ROUTINES. */