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:
parent
e2ced3385c
commit
66b1d8ab95
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user