Store the base offset of the final overrider in the OverriderInfo struct, to be used for vcall offsets.

llvm-svn: 96582
This commit is contained in:
Anders Carlsson 2010-02-18 16:29:24 +00:00
parent c8316a2e08
commit 5a7654a9d8
1 changed files with 6 additions and 1 deletions

View File

@ -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.