0x8000-0000 added a comment. One more mis-constification that I can't explain, nor reduce to a small test case (when I extract the code, the check behaves as expected / desired)
namespace util { struct StringIgnoreInitialHash : public std::unary_function<std::string, size_t> { size_t operator()(const std::string& rhs) const { std::size_t hash = 0; std::string::const_iterator str = rhs.begin(); std::string::const_iterator end = rhs.end(); if (str != end) { boost::hash_combine(hash, std::toupper(*str, std::locale())); ++str; } for (; str != end; ++str) { boost::hash_combine(hash, *str); } return hash; } }; } This is in a header included 29 times in other headers and 106 times directly in translation units. The const-checker reported 31 times that the variable 'hash' can be made constant. Also it reported 5 times that the variable 'str' can be made constant (which it can't) and 194 times that variable 'end' can be made constant (which it can, and should). Running in fix mode, made 'hash', 'str' and 'end' all constants. Extracting this into its own translation unit and adding the requisite \#includes and paths to the boost files does not reproduce the error. Only 'end' is, correctly, reported as needing to be const. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D54943/new/ https://reviews.llvm.org/D54943 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits