Vbase offsets
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Vbase offsets



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