Vbase offsets
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Vbase offsets
- To: cxx-abi@xxxxxxxxxxxxxxxxxxxx
- Subject: Vbase offsets
- From: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
- Date: Mon, 03 Apr 2000 20:35:08 -0700
We have:
There is one virtual base offset entry for each direct virtual base
class, and one for each indirect virtual base class inherited via a
direct virtual base class. (Indirect virtual base classes inherited
via direct non-virtual base classes may be accessed via the the offset
stored in the base's vtable.) If an indirect virtual base class is
inherited via both virtual and non-virtual direct base classes, no
virtual base offset entry is included for it.
That seems to imply that a *direct* virtual base gets a new vbase
offset, even it is also a direct virtual vbase of a direct non-virtual
base.
Example:
struct S {};
struct T : virtual public S {};
struct U : public T, virtual public S {};
The language quoted seems to imply that `U' gets a vbase offset for
`S'. But, that seems unncessary: we already have one in `T's vtable.
(Even if T were not the primary base, because it is a non-virtual
base, we know where to find the offset, give a `U*'.)
Am I missing something?
--
Mark Mitchell mark@xxxxxxxxxxxxxxxx
CodeSourcery, LLC http://www.codesourcery.com