@@ -8706,7 +8706,7 @@ void Tokenizer::findGarbageCode() const
87068706 syntaxError (tok);
87078707 if (Token::Match (tok, " : [)]=]" ))
87088708 syntaxError (tok);
8709- if (Token::Match (tok, " typedef [,;]" ))
8709+ if (Token::Match (tok, " typedef [,;: ]" ))
87108710 syntaxError (tok);
87118711 if (Token::Match (tok, " ! %comp%" ))
87128712 syntaxError (tok);
@@ -8747,6 +8747,16 @@ void Tokenizer::findGarbageCode() const
87478747 syntaxError (tok);
87488748 }
87498749 }
8750+ if (isCPP () && tok->str () == " namespace" && tok->tokAt (-1 )) {
8751+ if (!Token::Match (tok->tokAt (-1 ), " ;|{|}|using|inline" )) {
8752+ if (tok->tokAt (-1 )->isUpperCaseName ())
8753+ unknownMacroError (tok->tokAt (-1 ));
8754+ else if (tok->linkAt (-1 ) && tok->linkAt (-1 )->tokAt (-1 ) && tok->linkAt (-1 )->tokAt (-1 )->isUpperCaseName ())
8755+ unknownMacroError (tok->linkAt (-1 )->tokAt (-1 ));
8756+ else
8757+ syntaxError (tok);
8758+ }
8759+ }
87508760 }
87518761
87528762 // ternary operator without :
@@ -8772,10 +8782,16 @@ void Tokenizer::findGarbageCode() const
87728782 // Garbage templates..
87738783 if (isCPP ()) {
87748784 for (const Token *tok = tokens (); tok; tok = tok->next ()) {
8775- if (Token::simpleMatch (tok, " < >" ) && !(Token::Match (tok->tokAt (-1 ), " %name%" ) || (tok->tokAt (-1 ) && Token::Match (tok->tokAt (-2 ), " operator %op%" ))))
8776- syntaxError (tok);
8785+ if (Token::simpleMatch (tok, " < >" )) {
8786+ if (!(Token::Match (tok->tokAt (-1 ), " %name%" ) || (tok->tokAt (-1 ) && Token::Match (tok->tokAt (-2 ), " operator %op%" ))))
8787+ syntaxError (tok);
8788+ if (!tok->tokAt (-1 ) || tok->tokAt (-1 )->isLiteral ())
8789+ syntaxError (tok);
8790+ }
87778791 if (!Token::simpleMatch (tok, " template <" ))
87788792 continue ;
8793+ if (!tok->tokAt (2 ) || tok->tokAt (2 )->isLiteral ())
8794+ syntaxError (tok);
87798795 if (tok->previous () && !Token::Match (tok->previous (), " :|;|{|}|)|>|\" C++\" " )) {
87808796 if (tok->previous ()->isUpperCaseName ())
87818797 unknownMacroError (tok->previous ());
0 commit comments