MS ABI: Properly call global delete when invoking virtual destructors
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 31 Oct 2014 20:09:12 +0000 (20:09 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 31 Oct 2014 20:09:12 +0000 (20:09 +0000)
commit0c0b6d9ac6b37724807f1cf0c0c05b1bba3c3b48
tree5acc8db1d3c1a830e9df04a21ad87aa231c8ac84
parent6e21338abb6e4017a30323943daf074917601dd1
MS ABI: Properly call global delete when invoking virtual destructors

Summary:
The Itanium ABI approach of using offset-to-top isn't possible with the
MS ABI, it doesn't have that kind of information lying around.

Instead, we do the following:
- Call the virtual deleting destructor with the "don't delete the object
  flag" set.  The virtual deleting destructor will return a pointer to
  'this' adjusted to the most derived class.
- Call the global delete using the adjusted 'this' pointer.

Reviewers: rnk

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D5996

llvm-svn: 220993
12 files changed:
clang/lib/CodeGen/CGCXXABI.h
clang/lib/CodeGen/CGCall.cpp
clang/lib/CodeGen/CGExprCXX.cpp
clang/lib/CodeGen/CGVTables.cpp
clang/lib/CodeGen/CodeGenFunction.cpp
clang/lib/CodeGen/CodeGenFunction.h
clang/lib/CodeGen/ItaniumCXXABI.cpp
clang/lib/CodeGen/MicrosoftCXXABI.cpp
clang/test/CodeGenCXX/dllexport.cpp
clang/test/CodeGenCXX/microsoft-abi-structors.cpp
clang/test/CodeGenCXX/microsoft-abi-thunks.cpp
clang/test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp