mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-06 03:38:24 +00: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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217058 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
07ad198d6c
commit
75899aab35
@ -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