r196602 - [MS-ABI] Fix alias-avoidance padding between bases
Hans Wennborg
hans at chromium.org
Fri Dec 6 16:02:12 PST 2013
Hi Warren,
On Fri, Dec 6, 2013 at 11:54 AM, Warren Hunt <whunt at google.com> 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
More information about the cfe-commits
mailing list