@@ -317,7 +317,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::list<const Token
317317 * @param unknown it is not known if there is a pointer dereference (could be reported as a debug message)
318318 * @return true => there is a dereference
319319 */
320- bool CheckNullPointer::isPointerDeRef (const Token *tok, bool &unknown, const SymbolDatabase* symbolDatabase )
320+ bool CheckNullPointer::isPointerDeRef (const Token *tok, bool &unknown)
321321{
322322 const bool inconclusive = unknown;
323323
@@ -350,14 +350,14 @@ bool CheckNullPointer::isPointerDeRef(const Token *tok, bool &unknown, const Sym
350350 if (Token::Match (tok->tokAt (-4 ), " std :: string|wstring ( %var% )" ))
351351 return true ;
352352 if (Token::Match (tok->tokAt (-2 ), " %var% ( %var% )" )) {
353- const Variable* var = symbolDatabase-> getVariableFromVarId ( tok->tokAt (-2 )->varId () );
353+ const Variable* var = tok->tokAt (-2 )->variable ( );
354354 if (var && !var->isPointer () && !var->isArray () && Token::Match (var->typeStartToken (), " std :: string|wstring !!::" ))
355355 return true ;
356356 }
357357
358358 // streams dereference nullpointers
359359 if (Token::Match (tok->previous (), " <<|>> %var%" )) {
360- const Variable* var = symbolDatabase-> getVariableFromVarId ( tok->varId () );
360+ const Variable* var = tok->variable ( );
361361 if (var && var->isPointer () && Token::Match (var->typeStartToken (), " char|wchar_t" )) { // Only outputting or reading to char* can cause problems
362362 const Token* tok2 = tok->previous (); // Find start of statement
363363 for (; tok2; tok2 = tok2->previous ()) {
@@ -367,25 +367,22 @@ bool CheckNullPointer::isPointerDeRef(const Token *tok, bool &unknown, const Sym
367367 if (Token::Match (tok2, " std :: cout|cin|cerr" ))
368368 return true ;
369369 if (tok2 && tok2->varId () != 0 ) {
370- const Variable* var2 = symbolDatabase-> getVariableFromVarId ( tok2->varId () );
370+ const Variable* var2 = tok2->variable ( );
371371 if (var2 && Token::Match (var2->typeStartToken (), " std :: istream|ifstream|istringstream|wistringstream|ostream|ofstream|ostringstream|wostringstream|stringstream|wstringstream|fstream|iostream" ))
372372 return true ;
373373 }
374374 }
375375 }
376376
377- unsigned int ovarid = 0 ;
377+ const Variable *ovar = NULL ;
378378 if (Token::Match (tok, " %var% ==|!= %var%" ))
379- ovarid = tok->tokAt (2 )->varId ();
379+ ovar = tok->tokAt (2 )->variable ();
380380 else if (Token::Match (tok->tokAt (-2 ), " %var% ==|!= %var%" ))
381- ovarid = tok->tokAt (-2 )->varId ();
381+ ovar = tok->tokAt (-2 )->variable ();
382382 else if (Token::Match (tok->tokAt (-2 ), " %var% =|+ %var% )|]|,|;|+" ))
383- ovarid = tok->tokAt (-2 )->varId ();
384- if (ovarid) {
385- const Variable* var = symbolDatabase->getVariableFromVarId (ovarid);
386- if (var && !var->isPointer () && !var->isArray () && Token::Match (var->typeStartToken (), " std :: string|wstring !!::" ))
387- return true ;
388- }
383+ ovar = tok->tokAt (-2 )->variable ();
384+ if (ovar && !ovar->isPointer () && !ovar->isArray () && Token::Match (ovar->typeStartToken (), " std :: string|wstring !!::" ))
385+ return true ;
389386
390387 // Check if it's NOT a pointer dereference.
391388 // This is most useful in inconclusive checking
@@ -875,7 +872,7 @@ void CheckNullPointer::nullPointerByDeRefAndChec()
875872 break ;
876873 } else if (Token::Match (tok1->tokAt (-2 ), " &&|%oror% !" )) {
877874 break ;
878- } else if (CheckNullPointer::isPointerDeRef (tok1, unknown, symbolDatabase )) {
875+ } else if (CheckNullPointer::isPointerDeRef (tok1, unknown)) {
879876 nullPointerError (tok1, varname, tok, inconclusive);
880877 break ;
881878 } else if (tok1->strAt (-1 ) == " &" ) {
@@ -963,7 +960,7 @@ void CheckNullPointer::nullPointerByCheckAndDeRef()
963960
964961 // Pointer is used
965962 bool unknown = _settings->inconclusive ;
966- if (tok2->varId () == varid && (isPointerDeRef (tok2, unknown, symbolDatabase ) || unknown)) {
963+ if (tok2->varId () == varid && (isPointerDeRef (tok2, unknown) || unknown)) {
967964 nullPointerError (tok2, pointerName, vartok, unknown);
968965 break ;
969966 }
@@ -1020,7 +1017,7 @@ void CheckNullPointer::nullPointerByCheckAndDeRef()
10201017 bool unknown = _settings->inconclusive ;
10211018 for (; tok2 && tok2->str () != " ;" ; tok2 = tok2->next ()) {
10221019 if (tok2->varId () == varid) {
1023- if (CheckNullPointer::isPointerDeRef (tok2, unknown, symbolDatabase ))
1020+ if (CheckNullPointer::isPointerDeRef (tok2, unknown))
10241021 nullPointerError (tok2, pointerName, vartok, inconclusive);
10251022 else if (unknown)
10261023 nullPointerError (tok2, pointerName, vartok, true );
@@ -1090,7 +1087,7 @@ void CheckNullPointer::nullPointerByCheckAndDeRef()
10901087 if (Token::Match (tok2->previous (), " [;{}=] %var% = 0 ;" ))
10911088 ;
10921089
1093- else if (CheckNullPointer::isPointerDeRef (tok2, unknown, symbolDatabase ))
1090+ else if (CheckNullPointer::isPointerDeRef (tok2, unknown))
10941091 nullPointerError (tok2, pointerName, vartok, inconclusive);
10951092
10961093 else if (unknown && _settings->inconclusive )
@@ -1251,7 +1248,7 @@ void CheckNullPointer::nullPointerDefaultArgument()
12511248 if (Token::Match (tok, " %var% =" ))
12521249 pointerArgs.erase (tok->varId ());
12531250
1254- if (isPointerDeRef (tok, unknown, symbolDatabase ))
1251+ if (isPointerDeRef (tok, unknown))
12551252 nullPointerDefaultArgError (tok, tok->str ());
12561253 }
12571254 }
@@ -1380,7 +1377,7 @@ class Nullpointer : public ExecutionPath {
13801377 // unknown: if isPointerDeRef fails to determine if there
13811378 // is a dereference this will be set to true.
13821379 bool unknown = owner->inconclusiveFlag ();
1383- bool deref = CheckNullPointer::isPointerDeRef (&tok, unknown, symbolDatabase );
1380+ bool deref = CheckNullPointer::isPointerDeRef (&tok, unknown);
13841381
13851382 if (deref)
13861383 dereference (checks, &tok);
@@ -1407,7 +1404,7 @@ class Nullpointer : public ExecutionPath {
14071404 const Token* tok2 = &tok;
14081405 for (; tok2 && tok2->str () != " ;" ; tok2 = tok2->next ()) {
14091406 if (tok2->varId ()) {
1410- if (CheckNullPointer::isPointerDeRef (tok2, unknown, symbolDatabase ) || unknown)
1407+ if (CheckNullPointer::isPointerDeRef (tok2, unknown) || unknown)
14111408 dereference (checks, tok2);
14121409 }
14131410
@@ -1430,7 +1427,7 @@ class Nullpointer : public ExecutionPath {
14301427 if (tok2->str () == " (" || tok2->str () == " )" || tok2->str () == " &&" || tok2->str () == " ||" || tok2->str () == " ?" )
14311428 break ;
14321429 bool unknown = owner->inconclusiveFlag ();
1433- if (tok2->varId () && (CheckNullPointer::isPointerDeRef (tok2, unknown, symbolDatabase ) || unknown))
1430+ if (tok2->varId () && (CheckNullPointer::isPointerDeRef (tok2, unknown) || unknown))
14341431 dereference (checks, tok2);
14351432 }
14361433
0 commit comments