diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h index 28ec9db62e7..1932ffd3cb7 100644 --- a/include/llvm/IR/Attributes.h +++ b/include/llvm/IR/Attributes.h @@ -93,7 +93,11 @@ public: UWTable, ///< Function must be in a unwind table ZExt, ///< Zero extended before/after call - EndAttrKinds ///< Sentinal value useful for loops + EndAttrKinds, ///< Sentinal value useful for loops + + // Values for DenseMapInfo + EmptyKey = 0x7FFFFFFF, + TombstoneKey = -0x7FFFFFFF - 1 }; private: AttributeImpl *pImpl; @@ -165,10 +169,10 @@ public: /// AttrBuilder. template<> struct DenseMapInfo { static inline Attribute::AttrKind getEmptyKey() { - return Attribute::AttrKind(~0U); + return Attribute::EmptyKey; } static inline Attribute::AttrKind getTombstoneKey() { - return Attribute::AttrKind(~0U - 1); + return Attribute::TombstoneKey; } static unsigned getHashValue(const Attribute::AttrKind &Val) { return Val * 37U; diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 84f90ade8b2..039e036e894 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -426,6 +426,8 @@ uint64_t AttributeImpl::getBitMask() const { uint64_t AttributeImpl::getAttrMask(Attribute::AttrKind Val) { switch (Val) { case Attribute::EndAttrKinds: break; + case Attribute::EmptyKey: break; + case Attribute::TombstoneKey: break; case Attribute::None: return 0; case Attribute::ZExt: return 1 << 0; case Attribute::SExt: return 1 << 1;