call.c (build_new_method_call): Use binfo_for_vbase.

cp:
	* call.c (build_new_method_call): Use binfo_for_vbase.
testsuite:
	* g++.old_deja/g++.other/vbase4.C: New test.

From-SVN: r38866
This commit is contained in:
Nathan Sidwell 2001-01-10 14:13:41 +00:00 committed by Nathan Sidwell
parent 7805390752
commit 042b4c4e4d
4 changed files with 41 additions and 3 deletions

View File

@ -1,3 +1,7 @@
2001-01-10 Nathan Sidwell <nathan@codesourcery.com>
* call.c (build_new_method_call): Use binfo_for_vbase.
2001-01-10 Joseph S. Myers <jsm28@cam.ac.uk>
* cp-tree.h (flag_cond_mismatch): Don't declare.

View File

@ -4382,7 +4382,7 @@ build_new_method_call (instance, name, args, basetype_path, flags)
old ABI. */
name = constructor_p ? ctor_identifier : dtor_identifier;
}
/* If we're call a subobject constructor or destructor for a
/* If we're a call to a constructor or destructor for a
subobject that uses virtual base classes, then we need to
pass down a pointer to a VTT for the subobject. */
else if ((name == base_ctor_identifier
@ -4391,6 +4391,7 @@ build_new_method_call (instance, name, args, basetype_path, flags)
{
tree vtt;
tree sub_vtt;
tree basebinfo = basetype_path;
/* If the current function is a complete object constructor
or destructor, then we fetch the VTT directly.
@ -4401,9 +4402,11 @@ build_new_method_call (instance, name, args, basetype_path, flags)
DECL_USE_VTT_PARM (current_function_decl),
DECL_VTT_PARM (current_function_decl),
vtt);
if (TREE_VIA_VIRTUAL (basebinfo))
basebinfo = binfo_for_vbase (basetype, current_class_type);
my_friendly_assert (BINFO_SUBVTT_INDEX (basebinfo), 20010110);
sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
BINFO_SUBVTT_INDEX (basetype_path));
BINFO_SUBVTT_INDEX (basebinfo));
sub_vtt = build_indirect_ref (sub_vtt, NULL);
args = tree_cons (NULL_TREE, sub_vtt, args);

View File

@ -1,3 +1,7 @@
2001-01-10 Nathan Sidwell <nathan@codesourcery.com>
* g++.old_deja/g++.other/vbase4.C: New test.
2001-01-08 Jonathan Larmour <jlarmour@redhat.com>
* gcc.dg/20000419-2.c: Move to "special" subdirectory.

View File

@ -0,0 +1,27 @@
// Build don't link:
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 10 Jan 2001 <nathan@codesourcery.com>
// Origin snyder@fnal.gov
// Bug 933. Secondary vtables weren't correctly located for non-primary
// virtual bases. Causing us to ICE.
class d0_Object
{
public:
virtual ~d0_Object ();
};
class M10 : virtual public d0_Object {};
class M4 : virtual public M10 {};
class M9
: public M4, virtual public M10
{
public:
M9 ();
};
M9::M9 () {}