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