<div dir="ltr">Addressed in: 196627</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Dec 6, 2013 at 4:02 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Warren,<br>
<div><div class="h5"><br>
On Fri, Dec 6, 2013 at 11:54 AM, Warren Hunt <<a href="mailto:whunt@google.com">whunt@google.com</a>> wrote:<br>
> Author: whunt<br>
> Date: Fri Dec  6 13:54:25 2013<br>
> New Revision: 196602<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=196602&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=196602&view=rev</a><br>
> Log:<br>
> [MS-ABI] Fix alias-avoidance padding between bases<br>
><br>
> Adds padding between bases or virtual bases in an attempt to avoid<br>
> aliasing of zero-sized sub-objects.  The approach used by the ABI adds<br>
> two more bits of state.  Detailed comments are in the code.  Test cases<br>
> included.<br>
><br>
> Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D2258" target="_blank">http://llvm-reviews.chandlerc.com/D2258</a><br>
><br>
><br>
> Added:<br>
>     cfe/trunk/test/Layout/ms-x86-alias-avoidance-padding.cpp<br>
> Modified:<br>
>     cfe/trunk/include/clang/AST/RecordLayout.h<br>
>     cfe/trunk/lib/AST/RecordLayout.cpp<br>
>     cfe/trunk/lib/AST/RecordLayoutBuilder.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/AST/RecordLayout.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecordLayout.h?rev=196602&r1=196601&r2=196602&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecordLayout.h?rev=196602&r1=196601&r2=196602&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/include/clang/AST/RecordLayout.h (original)<br>
> +++ cfe/trunk/include/clang/AST/RecordLayout.h Fri Dec  6 13:54:25 2013<br>
> @@ -104,6 +104,14 @@ private:<br>
>      /// a primary base class.<br>
>      bool HasExtendableVFPtr : 1;<br>
><br>
> +    /// HasZeroSizedSubObject - True if this class contains a zero sized member or base or a base<br>
> +    /// with a zero sized member or base.  Only used for MS-ABI.<br>
> +    bool HasZeroSizedSubObject : 1;<br>
> +<br>
> +    /// \brief True if this class is zero sized or first base is zero sized or<br>
> +    /// has this property.  Only used for MS-ABI.<br>
> +    bool LeadsWithZeroSizedBase : 1;<br>
> +<br>
>      /// PrimaryBase - The primary base info for this record.<br>
>      llvm::PointerIntPair<const CXXRecordDecl *, 1, bool> PrimaryBase;<br>
><br>
> @@ -145,6 +153,8 @@ private:<br>
>                    const CXXRecordDecl *PrimaryBase,<br>
>                    bool IsPrimaryBaseVirtual,<br>
>                    const CXXRecordDecl *BaseSharingVBPtr,<br>
> +                  bool HasZeroSizedSubObject,<br>
> +                  bool LeadsWithZeroSizedBase,<br>
>                    const BaseOffsetsMapTy& BaseOffsets,<br>
>                    const VBaseOffsetsMapTy& VBaseOffsets);<br>
><br>
> @@ -272,6 +282,16 @@ public:<br>
>      return RequiredAlignment;<br>
>    }<br>
><br>
> +  bool hasZeroSizedSubObject() const {<br>
> +    assert(CXXInfo && "Record layout does not have C++ specific info!");<br>
<br>
</div></div>I'm hitting this assert when trying to run the test suite with the<br>
microsoft ABI instead of itanium. For example in these tests:<br>
CodeGen/2002-07-14-MiscTests3.c CodeGen/2002-07-30-UnionTest.c<br>
<br>
Any ideas what could cause this?<br>
<br>
Thanks,<br>
Hans<br>
</blockquote></div><br></div>