diff options
author | Anders Carlsson <andersca@mac.com> | 2010-02-18 16:29:24 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-02-18 16:29:24 +0000 |
commit | 5a7654a9d8af586e70a2b8a48d3c131c2766cac9 (patch) | |
tree | 1dbd0e7a0548d8bb0243af4ed5275fc5cf048e79 /clang/lib/CodeGen | |
parent | c8316a2e08e5de9f14818796e8bac94a83d23d2e (diff) | |
download | bcm5719-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.cpp | 7 |
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. |