@@ -2008,12 +2008,12 @@ static bool isc_strInPlusChain(const Token* tok, const Library::Container* conta
20082008
20092009static bool isc_strAssignment (const Token* tok)
20102010{
2011- if (!Token::simpleMatch (tok, " =" ))
2011+ if (!Token::Match (tok, " =|+ =" ))
20122012 return false ;
20132013 const Token* strTok = tok->astOperand1 ();
20142014 if (!strTok || !strTok->valueType ())
20152015 return false ;
2016- return isc_strCall (tok->astOperand2 (), strTok->valueType ()->container );
2016+ return isc_strInPlusChain (tok->astOperand2 (), strTok->valueType ()->container );
20172017}
20182018
20192019static bool isc_strConstructor (const Token* tok)
@@ -2085,13 +2085,13 @@ void CheckStl::string_c_str()
20852085 if (Token::Match (tok, " throw %var% . c_str|data ( ) ;" ) && isLocal (tok->next ()) &&
20862086 tok->next ()->variable () && tok->next ()->variable ()->isStlStringType ()) {
20872087 string_c_strThrowError (tok);
2088- } else if (tok->variable () && tok-> strAt ( 1 ) == " = " ) {
2089- if (Token::Match (tok->tokAt (2 ), " %var% . str ( ) . c_str|data ( ) ;" )) {
2088+ } else if (tok->variable ()) {
2089+ if (Token::Match (tok->tokAt (1 ), " = %var% . str ( ) . c_str|data ( ) ;" )) {
20902090 const Variable* var = tok->variable ();
20912091 const Variable* var2 = tok->tokAt (2 )->variable ();
20922092 if (var->isPointer () && var2 && var2->isStlType (stl_string_stream))
20932093 string_c_strError (tok);
2094- } else if (printPerformance && isc_strAssignment (tok->tokAt ( 1 ))) {
2094+ } else if (printPerformance && isc_strAssignment (tok->astParent ( ))) {
20952095 string_c_strAssignment (tok, tok->variable ()->getTypeName ());
20962096 } else if (Token::Match (tok->tokAt (2 ), " %name% (" ) &&
20972097 Token::Match (tok->linkAt (3 ), " ) . c_str|data ( ) ;" ) &&
0 commit comments