<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - [-cxx-abi microsoft] Bad layout of non-empty class hierarchy"
   href="http://llvm.org/bugs/show_bug.cgi?id=17761">17761</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[-cxx-abi microsoft] Bad layout of non-empty class hierarchy
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>LLVM Codegen
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>david.majnemer@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>take the following:

#include <stddef.h>
#include <stdio.h>
#include <string.h>
char buffer[419430400];
inline void *operator new(size_t, void *pv) { return pv; }
struct TypeName0 {
    long long TypeName0FieldName7;
    TypeName0() {
        printf("%llu\n", (unsigned long long)((size_t)this - (size_t)buffer));
        printf("%llu\n", (unsigned long long)((size_t)&TypeName0FieldName7 -
(size_t)buffer));
    }
};
struct TypeName2 {
    TypeName0 TypeName2FieldName30;
    TypeName2() {
        printf("%llu\n", (unsigned long long)((size_t)this - (size_t)buffer));
        printf("%llu\n", (unsigned long long)((size_t)&TypeName2FieldName30 -
(size_t)buffer));
    }
};
struct TypeName12: public TypeName0 {
    TypeName2 TypeName12FieldName0;
    TypeName12() {
        printf("%llu\n", (unsigned long long)((size_t)this - (size_t)buffer));
        printf("%llu\n", (unsigned long long)((size_t)&TypeName12FieldName0 -
(size_t)buffer));
    }
};
struct TypeName20: public TypeName0, public virtual TypeName12 {
    TypeName0 TypeName20FieldName20;

    int TypeName20FieldName31;
    bool : 3;
    TypeName20() {
        printf("%llu\n", (unsigned long long)((size_t)this - (size_t)buffer));
        printf("%llu\n", (unsigned long long)((size_t)&TypeName20FieldName20 -
(size_t)buffer));
        printf("%llu\n", (unsigned long long)((size_t)&TypeName20FieldName31 -
(size_t)buffer));
    }
};
int main() {
    memset(buffer, 0, sizeof(buffer));
    new (buffer) TypeName20;
}


we produce:
32
32
40
40
40
40
32
40
0
0
16
16
0
16
24

cl produces:
40
40
48
48
48
48
40
48
0
0
16
16
0
16
24</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>