diff options
author | Anders Carlsson <andersca@mac.com> | 2009-12-05 20:42:53 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-12-05 20:42:53 +0000 |
commit | 78c2898e0261b27d4ba8da65c4bd1174fb12911b (patch) | |
tree | 0a221eadc87753678a473904a50e2c535d80b2b6 /clang | |
parent | 5a1a84f9fa772bf0772c2d3b3b05945e3ebb5526 (diff) | |
download | bcm5719-llvm-78c2898e0261b27d4ba8da65c4bd1174fb12911b.tar.gz bcm5719-llvm-78c2898e0261b27d4ba8da65c4bd1174fb12911b.zip |
Change getCtorVtable to not return the address point offset, but the global variable.
llvm-svn: 90671
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGVtable.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGVtable.cpp b/clang/lib/CodeGen/CGVtable.cpp index 6600a241312..6408853df3f 100644 --- a/clang/lib/CodeGen/CGVtable.cpp +++ b/clang/lib/CodeGen/CGVtable.cpp @@ -1233,8 +1233,11 @@ class VTTBuilder { init = BuildVtablePtr(vtbl, VtblClass, RD, Offset); else { init = CGM.getVtableInfo().getCtorVtable(Class, Base, BaseOffset); - subvtbl = dyn_cast<llvm::Constant>(init->getOperand(0)); + + subvtbl = init; subVtblClass = Base; + + init = BuildVtablePtr(init, Class, Base, BaseOffset); } Inits.push_back(init); } @@ -1257,6 +1260,8 @@ class VTTBuilder { VtblClass = Class; } else { init = CGM.getVtableInfo().getCtorVtable(Class, RD, Offset); + init = BuildVtablePtr(init, RD, RD, Offset); + VtblClass = RD; } llvm::Constant *vtbl = dyn_cast<llvm::Constant>(init->getOperand(0)); @@ -1301,6 +1306,7 @@ class VTTBuilder { VirtualVTTs(Base); } } + public: VTTBuilder(std::vector<llvm::Constant *> &inits, const CXXRecordDecl *c, CodeGenModule &cgm) @@ -1412,7 +1418,9 @@ llvm::Constant *CGVtableInfo::getVtable(const CXXRecordDecl *RD) { llvm::Constant *CGVtableInfo::getCtorVtable(const CXXRecordDecl *LayoutClass, const CXXRecordDecl *RD, uint64_t Offset) { - return CGM.GenerateVtable(LayoutClass, RD, Offset); + llvm::Constant *Vtable = CGM.GenerateVtable(LayoutClass, RD, Offset); + + return cast<llvm::Constant>(Vtable->getOperand(0)); } void CGVtableInfo::MaybeEmitVtable(GlobalDecl GD) { |