Tail padding, in sumary
    Mark Mitchell 
    mark at codesourcery.com
       
    Fri Aug 23 00:14:57 UTC 2002
    
    
  
There are several separate tail-padding issues that have been discussed
over the last few days and I want to make sure that we are all on the
same page about all of them as I am trying to revise the specification
accordingly.
HP, Intel folks please confirm statements below.
1) Should we reuse tail padding at all?
   This was my original question; the specification was inconsistent.
   The answer was decided as yes.
2) Should padding be at the bit-field level, or only at the byte level?
   For example, given:
     struct A { virtual void f(); int i : 3; };
     struct B : public A { int j: 2; };
   Is it OK to pack B::j into the same byte as A::i?
   GCC does this (even though I think it a horrid idea due to the fact
   that you can no longer create efficient copy constructors).
   Neither Intel nor HP do this.
   Therefore, I believe the spec should be changed to clarify that --
   while the bytes following A::i are OK for use as padding -- the byte
   containing A::i is not.  (And, of course, GCC should be fixed.)
3) Should virtual bases be handled differently than non-virtual bases?
   For example, given:
     struct A { virtual void f(); char c1; };
     struct B { B(); char c2; };
     struct C : public A, public virtual B {};
   Is B supposed to be packed into the tail-padding of A?  In the case
   that it is non-virtual, it is.  However, in the virtual case GCC does
   not reuse the tail-padding.
   Probably, this is also a GCC bug, but I would like to know what HP
   and Intel do.
   HP, Intel?
-- 
Mark Mitchell                mark at codesourcery.com
CodeSourcery, LLC            http://www.codesourcery.com
    
    
More information about the cxx-abi-dev
mailing list