Correctly handle zero-sized but non-empty base classes in IRGen.
authorJohn McCall <rjmccall@apple.com>
Sun, 26 Apr 2015 04:43:26 +0000 (04:43 +0000)
committerJohn McCall <rjmccall@apple.com>
Sun, 26 Apr 2015 04:43:26 +0000 (04:43 +0000)
commit9fc700e76d74e1bc57e709ca7b096c7dc7025950
treee6427a0bbb36d95f06c24283643502f48df06a82
parentf26c748b1b0ac9544a09c8cd5f4423cc604fa7b4
Correctly handle zero-sized but non-empty base classes in IRGen.

Fixes rdar://20621065.

A more elegant fix would preclude this case by defining the
rules such that zero-size classes are always formally empty.
I believe the only extensions which create zero-size classes
right now are flexible arrays and zero-length arrays; it's
not abstractly unreasonable to say that those don't count
as members for the purposes of emptiness, just as zero-width
bitfields don't count.  But that's an ABI-affecting change
and requires further discussion; in the meantime, let's not
assert / miscompile.

llvm-svn: 235815
clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
clang/test/CodeGenCXX/empty-classes.cpp