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

Reply via email to