diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-02-27 19:40:09 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-02-27 19:40:09 +0000 |
commit | 9c6e9e313d61284f3d7fa46c86b6f999c8a1adea (patch) | |
tree | 1a5370baada30ba200cace6b00d71f37c3ee7a40 /clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp | |
parent | 1681092f9652b443aa2a355080b76714190579c0 (diff) | |
download | bcm5719-llvm-9c6e9e313d61284f3d7fa46c86b6f999c8a1adea.tar.gz bcm5719-llvm-9c6e9e313d61284f3d7fa46c86b6f999c8a1adea.zip |
MS ABI: Fix vftable mangling by using the vbtable name algorithm
Summary:
This merges VFPtrInfo and VBTableInfo into VPtrInfo, since they hold
almost the same information. With that change, the vbtable mangling
code can easily be applied to vftable data and we magically get the
correct, unambiguous vftable names.
Fixes PR17748.
Reviewers: timurrrr, majnemer
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2893
llvm-svn: 202425
Diffstat (limited to 'clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp index 333d30e3967..e40606f98b1 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp @@ -312,9 +312,7 @@ struct Z : Y, virtual B { // MANGLING-DAG: @"\01??_7Z@Test9@@6BX@1@@" // MANGLING-DAG: @"\01??_7Z@Test9@@6BY@1@@" - // FIXME this one is wrong: - // INCORRECT MANGLING-DAG: @"\01??_7Z@Test9@@6BB@@@" - // MANGLING-DAG-SHOULD-BE: @"\01??_7Z@Test9@@6B@" + // MANGLING-DAG: @"\01??_7Z@Test9@@6B@" }; Z z; @@ -347,11 +345,8 @@ struct W : Z, D, virtual A, virtual B { // MANGLING-DAG: @"\01??_7W@Test9@@6BD@@@" // MANGLING-DAG: @"\01??_7W@Test9@@6BX@1@@" - // FIXME: these two are wrong: - // INCORRECT MANGLING-DAG: @"\01??_7W@Test9@@6BB@@@" - // MANGLING-DAG-SHOULD-BE: @"\01??_7W@Test9@@6B@" - // INCORRECT MANGLING-DAG: @"\01??_7W@Test9@@6BY@1@Z@1@@" - // MANGLING-DAG-SHOULD-BE: @"\01??_7W@Test9@@6BY@1@@" + // MANGLING-DAG: @"\01??_7W@Test9@@6B@" + // MANGLING-DAG: @"\01??_7W@Test9@@6BY@1@@" }; W w; @@ -399,11 +394,8 @@ struct T : Z, D, virtual A, virtual B { // MANGLING-DAG: @"\01??_7T@Test9@@6BD@@@" // MANGLING-DAG: @"\01??_7T@Test9@@6BX@1@@" - // FIXME: these two are wrong: - // INCORRECT MANGLING-DAG: @"\01??_7T@Test9@@6BB@@@" - // MANGLING-DAG-SHOULD-BE: @"\01??_7T@Test9@@6B@" - // INCORRECT MANGLING-DAG: @"\01??_7T@Test9@@6BY@1@Z@1@@" - // MANGLING-DAG-SHOULD-BE: @"\01??_7T@Test9@@6BY@1@@" + // MANGLING-DAG: @"\01??_7T@Test9@@6B@" + // MANGLING-DAG: @"\01??_7T@Test9@@6BY@1@@" virtual void f(); virtual void g(); @@ -436,10 +428,7 @@ struct Y { virtual void g(); }; struct Z : virtual X, Y { // MANGLING-DAG: @"\01??_7Z@Test11@@6BY@1@@" - - // FIXME this one is wrong: - // MANGLING-DAG-SHOULD-BE: @"\01??_7Z@Test11@@6BX@1@@" - // INCORRECT MANGLING-DAG: @"\01??_7Z@Test11@@6BA@@@" + // MANGLING-DAG: @"\01??_7Z@Test11@@6BX@1@@" }; Z z; @@ -593,3 +582,23 @@ struct V : Z { V v; } + +namespace pr17748 { +struct A { + virtual void f() {} +}; + +struct B : virtual A { + B() {} +}; + +struct C : virtual B, A { + C() {} +}; +C c; + +// MANGLING-DAG: @"\01??_7A@pr17748@@6B@" +// MANGLING-DAG: @"\01??_7B@pr17748@@6B@" +// MANGLING-DAG: @"\01??_7C@pr17748@@6BA@1@@" +// MANGLING-DAG: @"\01??_7C@pr17748@@6BB@1@@" +} |