]> granicus.if.org Git - clang/commit
For the annals of subtle but terrible bugs: fix a longstanding bug
authorJohn McCall <rjmccall@apple.com>
Wed, 21 Mar 2012 06:57:19 +0000 (06:57 +0000)
committerJohn McCall <rjmccall@apple.com>
Wed, 21 Mar 2012 06:57:19 +0000 (06:57 +0000)
commit260a3e4370a15bc3da9d2d9461b6f179c68dd348
treeda5fb2598d2ed3a5f09761ee962cb502900a7a4b
parent247c7196526110ced1c08ebda1079201b6108d78
For the annals of subtle but terrible bugs:  fix a longstanding bug
in vtable layout where virtual methods inherited from virtual bases
could be assigned the same vcall adjustment slot if they shared
a name and parameter signature but differed in their
cv-qualification.  The code was already trying to handle this
case, but unfortunately used the ordinary type qualifiers
(which are always empty here) instead of the method qualifiers.
This seems like something that the API should discourage, but
I don't know how to carry that principle out in this instance.

Eliminate this function's need for an ASTContext while we're at it.

This bug affects the ABI, and fixing it brings us into accord with
the Itanium ABI (and GCC's implementation of it), but, obviously,
technically breaks full compatibility with previous releases of Clang.
Just letting you know.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153168 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/VTableBuilder.cpp
test/CodeGenCXX/vtable-layout.cpp