<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in ms-empty_bases.cpp</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>7eca8a3d - Address post-commit review feedback to r270457</title>
        <link>http://172.16.0.5:8080/history/llvm-project-15.0.7/clang/test/SemaCXX/ms-empty_bases.cpp#7eca8a3d</link>
        <description>Address post-commit review feedback to r270457Add two tests which show our error handling behavior for invalidparameters in the layout_version and empty_bases attributes.Amend our documentation to make it more clear that__declspec(empty_bases) and __declspec(layout_version) can only apply toclasses, structs, and unions.llvm-svn: 270461

            List of files:
            /llvm-project-15.0.7/clang/test/SemaCXX/ms-empty_bases.cpp</description>
        <pubDate>Mon, 23 May 2016 17:32:35 +0000</pubDate>
        <dc:creator>David Majnemer &lt;david.majnemer@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>cd3ebfe2 - [MS ABI] Implement __declspec(empty_bases) and __declspec(layout_version)</title>
        <link>http://172.16.0.5:8080/history/llvm-project-15.0.7/clang/test/SemaCXX/ms-empty_bases.cpp#cd3ebfe2</link>
        <description>[MS ABI] Implement __declspec(empty_bases) and __declspec(layout_version)The layout_version attribute is pretty straightforward: use the layoutrules from version XYZ of MSVC when used likestruct __declspec(layout_version(XYZ)) S {};The empty_bases attribute is more interesting.  It tries to get the C++empty base optimization to fire more often by tweaking the MSVC ABIrules in subtle ways:1. Disable the leading and trailing zero-sized object flags if a class   is marked __declspec(empty_bases) and is empty.   This means that given:   struct __declspec(empty_bases) A {};   struct __declspec(empty_bases) B {};   struct C : A, B {};   &apos;C&apos; will have size 1 and nvsize 0 despite not being annotated   __declspec(empty_bases).2. When laying out virtual or non-virtual bases, disable the injection   of padding between classes if the most derived class is marked   __declspec(empty_bases).   This means that given:   struct A {};   struct B {};   struct __declspec(empty_bases) C : A, B {};   &apos;C&apos; will have size 1 and nvsize 0.3. When calculating the offset of a non-virtual base, choose offset zero   if the most derived class is marked __declspec(empty_bases) and the   base is empty _and_ has an nvsize of 0.   Because of the ABI rules, this does not mean that empty bases   reliably get placed at offset 0!   For example:   struct A {};   struct B {};   struct __declspec(empty_bases) C : A, B { virtual ~C(); };   &apos;C&apos; will be pointer sized to account for the vfptr at offset 0.   &apos;A&apos; and &apos;B&apos; will _not_ be at offset 0 despite being empty!   Instead, they will be located right after the vfptr.   This occurs due to the interaction betweeen non-virtual base layout   and virtual function pointer injection: injection occurs after the   nv-bases and shifts them down by the size of a pointer.llvm-svn: 270457

            List of files:
            /llvm-project-15.0.7/clang/test/SemaCXX/ms-empty_bases.cpp</description>
        <pubDate>Mon, 23 May 2016 17:16:12 +0000</pubDate>
        <dc:creator>David Majnemer &lt;david.majnemer@gmail.com&gt;</dc:creator>
    </item>
</channel>
</rss>
