summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-05 20:42:53 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-05 20:42:53 +0000
commit78c2898e0261b27d4ba8da65c4bd1174fb12911b (patch)
tree0a221eadc87753678a473904a50e2c535d80b2b6 /clang
parent5a1a84f9fa772bf0772c2d3b3b05945e3ebb5526 (diff)
downloadbcm5719-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.cpp12
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) {
OpenPOWER on IntegriCloud