@@ -308,27 +308,25 @@ void CheckOther::checkUnsignedDivision()
308308 return ;
309309
310310 // Check for "ivar / uvar" and "uvar / ivar"
311- std::map<std::string , char > varsign;
311+ std::map<unsigned int , char > varsign;
312312 for (const Token *tok = _tokenizer->tokens (); tok; tok = tok->next ())
313313 {
314314 if (Token::Match (tok, " [{};(,] %type% %var% [;=,)]" ))
315315 {
316316 const char *type = tok->strAt (1 );
317317 if (strcmp (type, " char" ) == 0 || strcmp (type, " short" ) == 0 || strcmp (type, " int" ) == 0 )
318- varsign[tok->strAt ( 2 )] = ' s' ;
318+ varsign[tok->tokAt ( 2 )-> varId ( )] = ' s' ;
319319 }
320320
321321 else if (Token::Match (tok, " [{};(,] unsigned %type% %var% [;=,)]" ))
322- varsign[tok->strAt ( 3 )] = ' u' ;
322+ varsign[tok->tokAt ( 3 )-> varId ( )] = ' u' ;
323323
324324 else if (!Token::Match (tok, " [).]" ) && Token::Match (tok->next (), " %var% / %var%" ))
325325 {
326326 if (ErrorLogger::udivWarning (*_settings))
327327 {
328- const char *varname1 = tok->strAt (1 );
329- const char *varname2 = tok->strAt (3 );
330- char sign1 = varsign[varname1];
331- char sign2 = varsign[varname2];
328+ char sign1 = varsign[tok->tokAt (1 )->varId ()];
329+ char sign2 = varsign[tok->tokAt (3 )->varId ()];
332330
333331 if (sign1 && sign2 && sign1 != sign2)
334332 {
@@ -342,8 +340,7 @@ void CheckOther::checkUnsignedDivision()
342340 {
343341 if (tok->strAt (3 )[0 ] == ' -' && ErrorLogger::udivError ())
344342 {
345- const char *varname1 = tok->strAt (1 );
346- char sign1 = varsign[varname1];
343+ char sign1 = varsign[tok->tokAt (1 )->varId ()];
347344 if (sign1 == ' u' )
348345 {
349346 udivError (tok->next ());
@@ -355,8 +352,7 @@ void CheckOther::checkUnsignedDivision()
355352 {
356353 if (tok->strAt (1 )[0 ] == ' -' && ErrorLogger::udivError ())
357354 {
358- const char *varname2 = tok->strAt (3 );
359- char sign2 = varsign[varname2];
355+ char sign2 = varsign[tok->tokAt (3 )->varId ()];
360356 if (sign2 == ' u' )
361357 {
362358 udivError (tok->next ());
0 commit comments