Re: Vbase offsets
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Vbase offsets
- To: cxx-abi@xxxxxxxxxxxxxxxxxxxx, Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
- Subject: Re: Vbase offsets
- From: dehnert@xxxxxxxxxxxxxxxxxxxx (Jim Dehnert)
- Date: Mon, 3 Apr 2000 21:06:33 -0700 (PDT)
> From: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
>
> 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?
I don't know about you, but we are. This paragraph didn't get fixed
when we decided to always include vbase offsets for all virtual bases.
I've fixed it now (with the example) -- everyone please verify that it
matches our decisions.
Jim
- Jim Dehnert dehnert@xxxxxxx
(650)933-4272