1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00

Fix downcasts of unaligned empty/tombstone DenseMap keys for DenseMap<AssertVH<T>, Foo>.

Test Plan: llvm regression test suite

Reviewers: chandlerc, rsmith

Reviewed By: rsmith

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D4976

llvm-svn: 217058
This commit is contained in:
Alexey Samsonov 2014-09-03 18:11:48 +00:00
parent e2ced3385c
commit 66b1d8ab95

View File

@ -189,6 +189,7 @@ class AssertingVH
: public ValueHandleBase
#endif
{
friend struct DenseMapInfo<AssertingVH<ValueTy> >;
#ifndef NDEBUG
ValueTy *getValPtr() const {
@ -248,11 +249,19 @@ struct DenseMapInfo<AssertingVH<T> > {
static unsigned getHashValue(const AssertingVH<T> &Val) {
return PointerInfo::getHashValue(Val);
}
#ifndef NDEBUG
static bool isEqual(const AssertingVH<T> &LHS, const AssertingVH<T> &RHS) {
// Avoid downcasting AssertingVH<T> to T*, as empty/tombstone keys may not
// be properly aligned pointers to T*.
return LHS.ValueHandleBase::getValPtr() == RHS.ValueHandleBase::getValPtr();
}
#else
static bool isEqual(const AssertingVH<T> &LHS, const AssertingVH<T> &RHS) {
return LHS == RHS;
}
#endif
};
template <typename T>
struct isPodLike<AssertingVH<T> > {
#ifdef NDEBUG