summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-01-05 08:47:26 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-01-05 08:47:26 +0000
commit6f78fbbc630d2b86fb752574f5ad74473f57dfb1 (patch)
tree608fb966bcd4a8cdc89cc449dadc9853a9088956 /include
parentba7a4e69e8d45f63119abc69375f25124cc68535 (diff)
downloadllvm-6f78fbbc630d2b86fb752574f5ad74473f57dfb1.tar.gz
llvm-6f78fbbc630d2b86fb752574f5ad74473f57dfb1.tar.bz2
llvm-6f78fbbc630d2b86fb752574f5ad74473f57dfb1.tar.xz
Switch the empty and tombstone key enumerators to not have explicit
values -- that's not required to fix the bug that was cropping up, and the values selected made the enumeration's underlying type signed and introduced some warnings. This fixes the -Werror build. The underlying issue here was that the DenseMapInfo was casting values completely outside the range of the underlying storage of the enumeration to the enumeration's type. GCC went and "optimized" that into infloops and other misbehavior. By providing designated special values for these keys in the dense map, we ensure they are indeed representable and that they won't be used for anything else. It might be better to reuse None for the empty key and have the tombstone share the value of the sentinel enumerator, but honestly having 2 extra enumerators seemed not to matter and this seems a bit simpler. I'll let Bill shuffle this around (or ask me to shuffle it around) if he prefers it to look a different way. I also made the switch a bit more clear (and produce a better assert) that the enumerators are *never* going to show up and are errors if they do. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171614 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/IR/Attributes.h9
1 files changed, 4 insertions, 5 deletions
diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h
index 1932ffd3cb..1e5b1bb056 100644
--- a/include/llvm/IR/Attributes.h
+++ b/include/llvm/IR/Attributes.h
@@ -95,9 +95,8 @@ public:
EndAttrKinds, ///< Sentinal value useful for loops
- // Values for DenseMapInfo
- EmptyKey = 0x7FFFFFFF,
- TombstoneKey = -0x7FFFFFFF - 1
+ AttrKindEmptyKey, ///< Empty key value for DenseMapInfo
+ AttrKindTombstoneKey ///< Tombstone key value for DenseMapInfo
};
private:
AttributeImpl *pImpl;
@@ -169,10 +168,10 @@ public:
/// AttrBuilder.
template<> struct DenseMapInfo<Attribute::AttrKind> {
static inline Attribute::AttrKind getEmptyKey() {
- return Attribute::EmptyKey;
+ return Attribute::AttrKindEmptyKey;
}
static inline Attribute::AttrKind getTombstoneKey() {
- return Attribute::TombstoneKey;
+ return Attribute::AttrKindTombstoneKey;
}
static unsigned getHashValue(const Attribute::AttrKind &Val) {
return Val * 37U;