Index: include/llvm/ADT/DenseMapInfo.h =================================================================== --- include/llvm/ADT/DenseMapInfo.h +++ include/llvm/ADT/DenseMapInfo.h @@ -14,6 +14,7 @@ #ifndef LLVM_ADT_DENSEMAPINFO_H #define LLVM_ADT_DENSEMAPINFO_H +#include "llvm/Support/AlignOf.h" #include "llvm/Support/PointerLikeTypeTraits.h" #include "llvm/Support/type_traits.h" @@ -32,12 +33,20 @@ struct DenseMapInfo { static inline T* getEmptyKey() { uintptr_t Val = static_cast(-1); - Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; + const unsigned Alignment = + PointerLikeTypeTraits::NumLowBitsAvailable > alignOf() + ? (unsigned)PointerLikeTypeTraits::NumLowBitsAvailable + : alignOf(); + Val <<= Alignment; return reinterpret_cast(Val); } static inline T* getTombstoneKey() { uintptr_t Val = static_cast(-2); - Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; + const unsigned Alignment = + PointerLikeTypeTraits::NumLowBitsAvailable > alignOf() + ? (unsigned)PointerLikeTypeTraits::NumLowBitsAvailable + : alignOf(); + Val <<= Alignment; return reinterpret_cast(Val); } static unsigned getHashValue(const T *PtrVal) {