Index: llvm/trunk/include/llvm/ADT/DenseSet.h =================================================================== --- llvm/trunk/include/llvm/ADT/DenseSet.h +++ llvm/trunk/include/llvm/ADT/DenseSet.h @@ -136,8 +136,8 @@ public: using difference_type = typename MapTy::const_iterator::difference_type; using value_type = ValueT; - using pointer = value_type *; - using reference = value_type &; + using pointer = const value_type *; + using reference = const value_type &; using iterator_category = std::forward_iterator_tag; ConstIterator() = default; Index: llvm/trunk/unittests/ADT/DenseSetTest.cpp =================================================================== --- llvm/trunk/unittests/ADT/DenseSetTest.cpp +++ llvm/trunk/unittests/ADT/DenseSetTest.cpp @@ -15,6 +15,13 @@ namespace { +static_assert(std::is_const::const_iterator::pointer>::type>::value, + "Iterator pointer type should be const"); +static_assert(std::is_const::const_iterator::reference>::type>::value, + "Iterator reference type should be const"); + // Test hashing with a set of only two entries. TEST(DenseSetTest, DoubleEntrySetTest) { llvm::DenseSet set(2);