summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-02-18 16:29:24 +0000
committerAnders Carlsson <andersca@mac.com>2010-02-18 16:29:24 +0000
commit5a7654a9d8af586e70a2b8a48d3c131c2766cac9 (patch)
tree1dbd0e7a0548d8bb0243af4ed5275fc5cf048e79 /clang/lib/CodeGen
parentc8316a2e08e5de9f14818796e8bac94a83d23d2e (diff)
downloadbcm5719-llvm-5a7654a9d8af586e70a2b8a48d3c131c2766cac9.tar.gz
bcm5719-llvm-5a7654a9d8af586e70a2b8a48d3c131c2766cac9.zip
Store the base offset of the final overrider in the OverriderInfo struct, to be used for vcall offsets.
llvm-svn: 96582
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGVtable.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGVtable.cpp b/clang/lib/CodeGen/CGVtable.cpp
index b4c10a55c66..1f4d64d0fbb 100644
--- a/clang/lib/CodeGen/CGVtable.cpp
+++ b/clang/lib/CodeGen/CGVtable.cpp
@@ -58,8 +58,11 @@ public:
struct OverriderInfo {
/// Method - The method decl of the overrider.
const CXXMethodDecl *Method;
+
+ /// BaseOffset - the base offset of the overrider.
+ uint64_t BaseOffset;
- OverriderInfo() : Method(0) { }
+ OverriderInfo() : Method(0), BaseOffset(0) { }
};
private:
@@ -236,6 +239,7 @@ void FinalOverriders::AddOverriders(BaseSubobject Base,
OverriderInfo& Overrider = OverridersMap[std::make_pair(Base, MD)];
assert(!Overrider.Method && "Overrider should not exist yet!");
+ Overrider.BaseOffset = Base.getBaseOffset();
Overrider.Method = MD;
}
}
@@ -460,6 +464,7 @@ void FinalOverriders::PropagateOverrider(const CXXMethodDecl *OldMD,
}
// Set the new overrider.
+ Overrider.BaseOffset = NewBase.getBaseOffset();
Overrider.Method = NewMD;
// And propagate it further.
OpenPOWER on IntegriCloud