patches that caused, and fixed in mainline, PR c++/8117

Janis Johnson janis187@us.ibm.com
Fri Dec 13 17:09:00 GMT 2002


PR c++/8117 reports a regression from 3.0.4 that has been fixed on the
mainline but still exists in the 3.2 branch.

The bug showed up when this patch was added:

2001-11-28  Nathan Sidwell  <nathan@codesourcery.com>

	* cp-tree.h (UNIQUELY_DERIVED_FROM_P): Use lookup base.
	(ACCESSIBLY_UNIQUELY_DERIVED_FROM_P): Likewise.
	(PUBLICLY_UNIQUELY_DERIVED_FROM_P: Likewise.
	(DERIVED_FROM_P): Likewise.
	(enum base_access): Renumber, add ba_quiet bit mask.
	(get_binfo): Remove.
	(get_base_distance): Remove.
	(binfo_value): Remove.
	(ACCESSIBLY_DERIVED_FROM_P): Remove.
	* call.c (standard_conversion): Use lookup_base.
	* class.c (strictly_overrides): Likewise.
	(layout_virtual_bases): Likewise.
	(warn_about_ambiguous_direct_bases): Likewise.
	(is_base_of_enclosing_class): Likewise.
	(add_vcall_offset_vtbl_entries_1): Likewise.
	* cvt.c (build_up_reference): Adjust comment.
	* init.c (build_member_call): Reformat.
	* search.c (get_binfo): Remove.
	(get_base_distance_recursive): Remove.
	(get_base_distance): Remove.
	(lookup_base_r): Tweak.
	(lookup_base): Add ba_quiet control. Complete the types here.
	(covariant_return_p): Use lookup_base.
	* tree.c (binfo_value): Remove.
	(maybe_dummy_object): Use lookup_base.
	* typeck.c (build_static_cast): Use lookup_base.
	(get_delta_difference): Likewise.
	* typeck2.c (binfo_or_else): Use lookup_base.
	(build_scoped_ref): Add back error_mark_check.
	(build_m_component_ref): Use lookup_base.

The bug went away on the mainline when this patch was added:

2002-10-25  Mark Mitchell  <mark@codesourcery.com>

	* call.c (build_over_call): Use DECL_CONTEXT, not
	DECL_VIRTUAL_CONTEXT.
	* class.c (modify_vtable_entry): Don't mess with
	DECL_VIRTUAL_CONTEXT.
	(set_vindex): Remove.
	(set_primary_base): Remove vfuns_p parameter.
	(determine_primary_base): Likewise.
	(modify_all_vtables): Likewise.
	(layout_class_type): Likewise.  Adjust calls to other functions
	accordingly.
	(finish_struct_1): Adjust calls to modified functions.  Set
	DECL_VINDEX here.
	* cp-tree.h (lang_type_class): Remove vsize.
	(CLASSTYPE_VSIZE): Remove.
	(lang_decl): Remove thunks.
	(DECL_THUNKS): Adjust.
	(DECL_VIRTUAL_CONTEXT): Remove.
	(duplicate_decls): Don't copy it.
	* pt.c (build_template_decl): Don't set it.
	(tsubst_decl): Likewise.
	* typeck.c (expand_ptrmemfunc_cst): Don't use it.

Here's a small test case, which is legal code for which cc1plus
incorrectly reported errors:

--------------
struct A {
  virtual void a() = 0;
};

struct B : A {};
struct C : A {};

struct D : B, C {
  virtual void a() {}
};

void (D::*s_fxn)() = &D::a;
--------------

This information will also be added to the PR.

Janis



More information about the Gcc mailing list