git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90563 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2009-12-04 08:40:51 +00:00
Родитель ca9b56c26a
Коммит 367d122365
1 изменённых файлов: 14 добавлений и 16 удалений

Просмотреть файл

@ -284,9 +284,9 @@ public:
return 0; return 0;
} }
bool OverrideMethod(GlobalDecl GD, llvm::Constant *m, bool OverrideMethod(GlobalDecl GD, bool MorallyVirtual,
bool MorallyVirtual, Index_t OverrideOffset, Index_t OverrideOffset, Index_t Offset,
Index_t Offset, int64_t CurrentVBaseOffset); int64_t CurrentVBaseOffset);
/// AppendMethods - Append the current methods to the vtable. /// AppendMethods - Append the current methods to the vtable.
void AppendMethodsToVtable(); void AppendMethodsToVtable();
@ -315,15 +315,15 @@ public:
if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
// Override both the complete and the deleting destructor. // Override both the complete and the deleting destructor.
GlobalDecl CompDtor(DD, Dtor_Complete); GlobalDecl CompDtor(DD, Dtor_Complete);
OverrideMethod(CompDtor, WrapAddrOf(CompDtor), MorallyVirtual, OverrideMethod(CompDtor, MorallyVirtual, OverrideOffset, Offset,
OverrideOffset, Offset, CurrentVBaseOffset); CurrentVBaseOffset);
GlobalDecl DeletingDtor(DD, Dtor_Deleting); GlobalDecl DeletingDtor(DD, Dtor_Deleting);
OverrideMethod(DeletingDtor, WrapAddrOf(DeletingDtor), MorallyVirtual, OverrideMethod(DeletingDtor, MorallyVirtual, OverrideOffset, Offset,
OverrideOffset, Offset, CurrentVBaseOffset); CurrentVBaseOffset);
} else { } else {
OverrideMethod(MD, WrapAddrOf(MD), MorallyVirtual, OverrideOffset, OverrideMethod(MD, MorallyVirtual, OverrideOffset, Offset,
Offset, CurrentVBaseOffset); CurrentVBaseOffset);
} }
} }
} }
@ -331,10 +331,8 @@ public:
void AddMethod(const GlobalDecl GD, bool MorallyVirtual, Index_t Offset, void AddMethod(const GlobalDecl GD, bool MorallyVirtual, Index_t Offset,
int64_t CurrentVBaseOffset) { int64_t CurrentVBaseOffset) {
llvm::Constant *m = WrapAddrOf(GD);
// If we can find a previously allocated slot for this, reuse it. // If we can find a previously allocated slot for this, reuse it.
if (OverrideMethod(GD, m, MorallyVirtual, Offset, Offset, if (OverrideMethod(GD, MorallyVirtual, Offset, Offset,
CurrentVBaseOffset)) CurrentVBaseOffset))
return; return;
@ -723,9 +721,9 @@ TypeConversionRequiresAdjustment(ASTContext &Ctx,
return TypeConversionRequiresAdjustment(Ctx, DerivedDecl, BaseDecl); return TypeConversionRequiresAdjustment(Ctx, DerivedDecl, BaseDecl);
} }
bool VtableBuilder::OverrideMethod(GlobalDecl GD, llvm::Constant *m, bool VtableBuilder::OverrideMethod(GlobalDecl GD, bool MorallyVirtual,
bool MorallyVirtual, Index_t OverrideOffset, Index_t OverrideOffset, Index_t Offset,
Index_t Offset, int64_t CurrentVBaseOffset) { int64_t CurrentVBaseOffset) {
const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl()); const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
const bool isPure = MD->isPure(); const bool isPure = MD->isPure();