[cfe-commits] r126876 - /cfe/trunk/lib/CodeGen/CGVTables.cpp
Tilmann Scheller
tilmann.scheller at googlemail.com
Wed Mar 2 12:40:50 PST 2011
Author: tilmann
Date: Wed Mar 2 14:40:50 2011
New Revision: 126876
URL: http://llvm.org/viewvc/llvm-project?rev=126876&view=rev
Log:
Revert "Add preliminary support for MSVC-style vtables."
This reverts commit 126865.
Modified:
cfe/trunk/lib/CodeGen/CGVTables.cpp
Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=126876&r1=126875&r2=126876&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGVTables.cpp Wed Mar 2 14:40:50 2011
@@ -2266,32 +2266,6 @@
int64_t CurrentIndex = 0;
- // The MSVC Win64 ABI uses a different ordering of the
- // virtual function pointers:
- //
- // The order of the virtual function pointers in a virtual table is
- // the reverse order of declaration of the corresponding member functions
- // in the class except for overloaded member functions. Overloaded member
- // functions are moved below the first declaration of the
- // respective overloaded member function. All declarations for one
- // overloaded member function are added in reverse order of declaration.
- //
- // E.g. for the following class:
- // class A {
- // virtual b();
- // virtual a(int a);
- // virtual c();
- // virtual a(float a);
- // };
- //
- // The vtable layout looks like this:
- // c()
- // a(float b)
- // a(int a)
- // b()
- //
- const bool IsWin64 = CGM.getContext().Target.isWin64();
-
const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
const CXXRecordDecl *PrimaryBase = Layout.getPrimaryBase();
@@ -2311,9 +2285,6 @@
const CXXDestructorDecl *ImplicitVirtualDtor = 0;
- llvm::StringMap<llvm::SmallVector<const CXXMethodDecl *, 16> *> Methods;
- llvm::SmallVector<llvm::SmallVector<const CXXMethodDecl *, 16> *, 16> Order;
-
for (CXXRecordDecl::method_iterator i = RD->method_begin(),
e = RD->method_end(); i != e; ++i) {
const CXXMethodDecl *MD = *i;
@@ -2322,20 +2293,6 @@
if (!MD->isVirtual())
continue;
- if (IsWin64) {
- if (Methods.count(MD->getNameAsString()) == 0) {
- // No entry yet.
- llvm::SmallVector<const CXXMethodDecl *, 16> *entry = new llvm::SmallVector<const CXXMethodDecl *, 16>();
- entry->push_back(MD);
- Methods[MD->getNameAsString()] = entry;
- Order.push_back(entry);
- } else {
- // This is an overloaded method, add to already existing entry.
- llvm::SmallVector<const CXXMethodDecl *, 16> *entry = Methods[MD->getNameAsString()];
- entry->push_back(MD);
- }
- }
-
// Check if this method overrides a method in the primary base.
if (const CXXMethodDecl *OverriddenMD =
FindNearestOverriddenMethod(MD, PrimaryBases)) {
@@ -2370,7 +2327,7 @@
ImplicitVirtualDtor = DD;
continue;
}
- assert(!IsWin64 && "Need support for dtor!");
+
// Add the complete dtor.
MethodVTableIndices[GlobalDecl(DD, Dtor_Complete)] = CurrentIndex++;
@@ -2378,14 +2335,11 @@
MethodVTableIndices[GlobalDecl(DD, Dtor_Deleting)] = CurrentIndex++;
} else {
// Add the entry.
- if (!IsWin64) {
- MethodVTableIndices[MD] = CurrentIndex++;
- }
+ MethodVTableIndices[MD] = CurrentIndex++;
}
}
if (ImplicitVirtualDtor) {
- assert(!IsWin64 && "Need support for implicit virtual dtor!");
// Itanium C++ ABI 2.5.2:
// If a class has an implicitly-defined virtual destructor,
// its entries come after the declared virtual function pointers.
@@ -2399,19 +2353,6 @@
CurrentIndex++;
}
- if (IsWin64) {
- for (llvm::SmallVector<llvm::SmallVector<const CXXMethodDecl *, 16> *, 16>::iterator i = Order.begin(),
- e = Order.end(); i != e; ++i) {
- llvm::SmallVector<const CXXMethodDecl *, 16> *elem = *i;
-
- while (elem->size() > 0) {
- const CXXMethodDecl *method = elem->pop_back_val();
- // Add the entry.
- MethodVTableIndices[method] = CurrentIndex++;
- }
- }
- }
-
NumVirtualFunctionPointers[RD] = CurrentIndex;
}
More information about the cfe-commits
mailing list