From 96891dfacee7e2b94c3ef2b621a1db9109598f61 Mon Sep 17 00:00:00 2001 From: Alexander Mai Date: Sat, 9 May 2015 19:26:31 +0200 Subject: [PATCH] #6276 clang: -fsanitize=integer warnings. Fix remaining issues in preprocessor.cpp. --- lib/preprocessor.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 409ea21ae..03e9056a7 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -67,8 +67,8 @@ static unsigned char readChar(std::istream &istr, unsigned int bom) // For UTF-16 encoded files the BOM is 0xfeff/0xfffe. If the // character is non-ASCII character then replace it with 0xff if (bom == 0xfeff || bom == 0xfffe) { - unsigned char ch2 = (unsigned char)istr.get(); - int ch16 = (bom == 0xfeff) ? (ch<<8 | ch2) : (ch2<<8 | ch); + const unsigned char ch2 = (unsigned char)istr.get(); + const int ch16 = (bom == 0xfeff) ? (ch<<8 | ch2) : (ch2<<8 | ch); ch = (unsigned char)((ch16 >= 0x80) ? 0xff : ch16); } @@ -673,7 +673,7 @@ std::string Preprocessor::removeComments(const std::string &str, const std::stri chNext = str[i]; if (chNext == '\\') { ++i; - char chSeq = str[i]; + const char chSeq = str[i]; if (chSeq == '\n') ++newlines; else { @@ -1232,9 +1232,9 @@ std::list Preprocessor::getcfgs(const std::string &filedata, const if (line.compare(0, 6, "#file ") == 0) { includeguard = true; - std::string::size_type start=line.find("\""); - std::string::size_type end=line.find("\"",start+1); - std::string includeFile=line.substr(start+1,end-start-1); + const std::string::size_type start=line.find("\""); + const std::string::size_type end=line.find("\"",start+1); + const std::string includeFile=line.substr(start+1,end-start-1); bool fileExcluded = false; ++filelevel; if (! _settings) { @@ -1257,7 +1257,7 @@ std::list Preprocessor::getcfgs(const std::string &filedata, const if (line.compare(0, 8, "#define ") == 0) { bool valid = false; for (std::string::size_type pos = 8; pos < line.size(); ++pos) { - char ch = line[pos]; + const char ch = line[pos]; if (ch=='_' || (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || (pos>8 && ch>='0' && ch<='9')) { valid = true; continue; @@ -1323,8 +1323,8 @@ std::list Preprocessor::getcfgs(const std::string &filedata, const if (par != 0) { std::ostringstream lineStream; lineStream << __LINE__; - std::string errorId = "preprocessor" + lineStream.str(); - std::string errorText = "mismatching number of '(' and ')' in this line: " + def; + const std::string errorId = "preprocessor" + lineStream.str(); + const std::string errorText = "mismatching number of '(' and ')' in this line: " + def; writeError(filename, linenr, _errorLogger, errorId, errorText); ret.clear(); return ret; @@ -1822,7 +1822,7 @@ std::string Preprocessor::getcode(const std::string &filedata, const std::string if (_settings) { typedef std::set::const_iterator It; for (It it = _settings->userUndefs.begin(); it != _settings->userUndefs.end(); ++it) { - std::string::size_type pos = line.find_first_not_of(' ',8); + const std::string::size_type pos = line.find_first_not_of(' ',8); if (pos != std::string::npos) { std::string::size_type pos2 = line.find(*it,pos); if ((pos2 != std::string::npos) && @@ -1846,7 +1846,7 @@ std::string Preprocessor::getcode(const std::string &filedata, const std::string } if (match) { - std::string::size_type pos = line.find_first_of(" (", 8); + const std::string::size_type pos = line.find_first_of(" (", 8); if (pos == std::string::npos) cfgmap[line.substr(8)] = ""; else if (line[pos] == ' ') { @@ -2070,7 +2070,7 @@ std::string Preprocessor::handleIncludes(const std::string &code, const std::str unsigned int linenr = 0; - std::set undefs = _settings ? _settings->userUndefs : std::set(); + const std::set& undefs = _settings ? _settings->userUndefs : std::set(); if (_errorLogger) _errorLogger->reportProgress(filePath, "Preprocessor (handleIncludes)", 0); @@ -2148,13 +2148,13 @@ std::string Preprocessor::handleIncludes(const std::string &code, const std::str elseIsTrue = true; // this value doesn't matter when suppressCurrentCodePath is true } else if (line.compare(0,6,"#elif ") == 0 || line.compare(0,5,"#else") == 0) { if (!elseIsTrue) { - if (indentmatch == indent) { + if ((indentmatch > 0) && (indentmatch == indent)) { indentmatch = indent - 1; } } else { - if (indentmatch == indent) { + if ((indentmatch > 0) && (indentmatch == indent)) { indentmatch = indent - 1; - } else if (indentmatch == indent - 1) { + } else if ((indent > 0) && indentmatch == indent - 1) { if (line.compare(0,5,"#else")==0 || match_cfg_def(defs,line.substr(6))) { indentmatch = indent; elseIsTrue = false; @@ -2269,7 +2269,7 @@ void Preprocessor::handleIncludes(std::string &code, const std::string &filePath std::list paths; std::string path; path = filePath; - std::string::size_type sep_pos = path.find_last_of("\\/"); + const std::string::size_type sep_pos = path.find_last_of("\\/"); if (sep_pos != std::string::npos) path.erase(1 + sep_pos); paths.push_back(path); @@ -2428,10 +2428,10 @@ static void skipstring(const std::string &line, std::string::size_type &pos) */ static std::string trim(const std::string& s) { - std::string::size_type beg = s.find_first_not_of(" \t"); + const std::string::size_type beg = s.find_first_not_of(" \t"); if (beg == std::string::npos) return s; - std::string::size_type end = s.find_last_not_of(" \t"); + const std::string::size_type end = s.find_last_not_of(" \t"); if (end == std::string::npos) return s.substr(beg); return s.substr(beg, end - beg + 1); @@ -2577,7 +2577,7 @@ private: for (std::size_t ipar = 0; ipar < params1.size(); ++ipar) { const std::string s(innerMacroName + "("); - std::string param(params1[ipar]); + const std::string param(params1[ipar]); if (param.compare(0,s.length(),s)==0 && param[param.length()-1]==')') { std::vector innerparams; std::string::size_type pos = s.length() - 1; @@ -2626,7 +2626,7 @@ public: // initialize parameters to default values _variadic = _nopar = false; - std::string::size_type pos = macro.find_first_of(" ("); + const std::string::size_type pos = macro.find_first_of(" ("); if (pos != std::string::npos && macro[pos] == '(') { // Extract macro parameters if (Token::Match(tokens(), "%name% ( %name%")) {