Addressed in: 196627
On Fri, Dec 6, 2013 at 4:02 PM, Hans Wennborg <[email protected]> wrote: > Hi Warren, > > On Fri, Dec 6, 2013 at 11:54 AM, Warren Hunt <[email protected]> wrote: > > Author: whunt > > Date: Fri Dec 6 13:54:25 2013 > > New Revision: 196602 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=196602&view=rev > > Log: > > [MS-ABI] Fix alias-avoidance padding between bases > > > > Adds padding between bases or virtual bases in an attempt to avoid > > aliasing of zero-sized sub-objects. The approach used by the ABI adds > > two more bits of state. Detailed comments are in the code. Test cases > > included. > > > > Differential Revision: http://llvm-reviews.chandlerc.com/D2258 > > > > > > Added: > > cfe/trunk/test/Layout/ms-x86-alias-avoidance-padding.cpp > > Modified: > > cfe/trunk/include/clang/AST/RecordLayout.h > > cfe/trunk/lib/AST/RecordLayout.cpp > > cfe/trunk/lib/AST/RecordLayoutBuilder.cpp > > > > Modified: cfe/trunk/include/clang/AST/RecordLayout.h > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecordLayout.h?rev=196602&r1=196601&r2=196602&view=diff > > > ============================================================================== > > --- cfe/trunk/include/clang/AST/RecordLayout.h (original) > > +++ cfe/trunk/include/clang/AST/RecordLayout.h Fri Dec 6 13:54:25 2013 > > @@ -104,6 +104,14 @@ private: > > /// a primary base class. > > bool HasExtendableVFPtr : 1; > > > > + /// HasZeroSizedSubObject - True if this class contains a zero > sized member or base or a base > > + /// with a zero sized member or base. Only used for MS-ABI. > > + bool HasZeroSizedSubObject : 1; > > + > > + /// \brief True if this class is zero sized or first base is zero > sized or > > + /// has this property. Only used for MS-ABI. > > + bool LeadsWithZeroSizedBase : 1; > > + > > /// PrimaryBase - The primary base info for this record. > > llvm::PointerIntPair<const CXXRecordDecl *, 1, bool> PrimaryBase; > > > > @@ -145,6 +153,8 @@ private: > > const CXXRecordDecl *PrimaryBase, > > bool IsPrimaryBaseVirtual, > > const CXXRecordDecl *BaseSharingVBPtr, > > + bool HasZeroSizedSubObject, > > + bool LeadsWithZeroSizedBase, > > const BaseOffsetsMapTy& BaseOffsets, > > const VBaseOffsetsMapTy& VBaseOffsets); > > > > @@ -272,6 +282,16 @@ public: > > return RequiredAlignment; > > } > > > > + bool hasZeroSizedSubObject() const { > > + assert(CXXInfo && "Record layout does not have C++ specific info!"); > > I'm hitting this assert when trying to run the test suite with the > microsoft ABI instead of itanium. For example in these tests: > CodeGen/2002-07-14-MiscTests3.c CodeGen/2002-07-30-UnionTest.c > > Any ideas what could cause this? > > Thanks, > Hans >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
