[MS ABI] Detect and diagnose vftables which cannot be created
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 1 May 2015 21:35:45 +0000 (21:35 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 1 May 2015 21:35:45 +0000 (21:35 +0000)
commit70e6a00170a44b242e1852fb0826dd51aa196e86
treeefc7e1fea97aabee94a8758e1b708fda3db6091e
parentead97576a962ab9e6dfc3d09e5aafe301acad404
[MS ABI] Detect and diagnose vftables which cannot be created

The MSVC ABI has a bug introduced by appending to the end of vftables
which come from virtual bases: covariant thunks introduces via
non-overlapping regions of the inheritance lattice both append to the
same slot in the vftable.

It is possible to generate correct vftables in cases where one node in
the lattice completely dominates the other on the way to the base with
the vfptr; in all other cases, we must raise a diagnostic in order to
prevent the illusion that we succeeded in laying out the vftable.

This fixes PR16759.

llvm-svn: 236354
clang/include/clang/Basic/DiagnosticASTKinds.td
clang/include/clang/Basic/DiagnosticIDs.h
clang/lib/AST/VTableBuilder.cpp