diff --git a/lib/checkstring.cpp b/lib/checkstring.cpp index 70e31ccdf..2236cea06 100644 --- a/lib/checkstring.cpp +++ b/lib/checkstring.cpp @@ -166,7 +166,7 @@ void CheckString::checkSuspiciousStringCompare() const Token* litTok = tok->astOperand2(); if (!varTok || !litTok) // <- failed to create AST for comparison continue; - if (varTok->tokType() == Token::eString || varTok->tokType() == Token::eNumber) + if (Token::Match(varTok, "%char%|%num%|%str%")) std::swap(varTok, litTok); else if (!Token::Match(litTok, "%char%|%num%|%str%")) continue; @@ -200,9 +200,7 @@ void CheckString::checkSuspiciousStringCompare() varTok = varTok->astParent(); const std::string varname = varTok->expressionString(); - const bool ischar(litTok->tokType() == Token::eChar || - (!litTok->originalName().empty() && - litTok->originalName().front() == '\'')); + const bool ischar(litTok->tokType() == Token::eChar); if (litTok->tokType() == Token::eString) { if (_tokenizer->isC() || (var && var->isArrayOrPointer())) suspiciousStringCompareError(tok, varname); diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 7ea58c03b..c42a97e33 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1894,7 +1894,7 @@ void Tokenizer::simplifyNull() for (Token *tok = list.front(); tok; tok = tok->next()) { if (tok->str() == "NULL" && (!Token::Match(tok->previous(), "[(,] NULL [,)]") || tok->strAt(-2) == "=")) tok->str("0"); - else if (tok->str() == "__null" || tok->str() == "'\\0'" || tok->str() == "'\\x0'") { + else if (tok->str() == "__null") { tok->originalName(tok->str()); tok->str("0"); } diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index fb376d214..890a03ae4 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -341,7 +341,7 @@ private: ASSERT_EQUALS("; x [ ++ y ] = x [ y ] + 1 ;", tok("; x[++y] += 1;")); ASSERT_EQUALS(";", tok(";x += 0;")); - ASSERT_EQUALS(";", tok(";x += '\\0';")); + TODO_ASSERT_EQUALS(";", "; x = x + '\\0' ;", tok("; x += '\\0'; ")); ASSERT_EQUALS(";", tok(";x -= 0;")); ASSERT_EQUALS(";", tok(";x |= 0;")); ASSERT_EQUALS(";", tok(";x *= 1;")); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index ffdcebb2a..ff84a2498 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -3698,15 +3698,13 @@ private: void vardecl8() { // ticket #696 const char code[] = "char a[10]={'\\0'}, b[10]={'\\0'};"; - const char res[] = "char a [ 10 ] = { 0 } ; char b [ 10 ] = { 0 } ;"; - + const char res[] = "char a [ 10 ] = { '\\0' } ; char b [ 10 ] = { '\\0' } ;"; ASSERT_EQUALS(res, tokenizeAndStringify(code)); } void vardecl9() { const char code[] = "char a[2] = {'A', '\\0'}, b[2] = {'B', '\\0'};"; - const char res[] = "char a [ 2 ] = { 'A' , 0 } ; char b [ 2 ] = { 'B' , 0 } ;"; - + const char res[] = "char a [ 2 ] = { 'A' , '\\0' } ; char b [ 2 ] = { 'B' , '\\0' } ;"; ASSERT_EQUALS(res, tokenizeAndStringify(code)); }