File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8054,6 +8054,17 @@ void Tokenizer::reportUnknownMacros() const
80548054 }
80558055 }
80568056
8057+ // Report unknown macros before } "{ .. if (x) MACRO }"
8058+ for (const Token *tok = tokens (); tok; tok = tok->next ()) {
8059+ if (Token::Match (tok, " )|; %name% }" )) {
8060+ const Token* prev = tok->linkAt (2 );
8061+ while (Token::simpleMatch (prev, " {" ))
8062+ prev = prev->previous ();
8063+ if (Token::Match (prev, " ;|)" ))
8064+ unknownMacroError (tok->next ());
8065+ }
8066+ }
8067+
80578068 // Report unknown macros that contain several statements "MACRO(a;b;c)"
80588069 for (const Token *tok = tokens (); tok; tok = tok->next ()) {
80598070 if (!Token::Match (tok, " %name% (" ))
Original file line number Diff line number Diff line change @@ -6843,6 +6843,9 @@ class TestTokenizer : public TestFixture {
68436843 ASSERT_NO_THROW (tokenizeAndStringify (code11));
68446844
68456845 ASSERT_NO_THROW (tokenizeAndStringify (" alignas(8) alignas(16) int x;" )); // alignas is not unknown macro
6846+
6847+ ASSERT_THROW (tokenizeAndStringify (" void foo() { if(x) SYSTEM_ERROR }" ), InternalError);
6848+ ASSERT_THROW (tokenizeAndStringify (" void foo() { dostuff(); SYSTEM_ERROR }" ), InternalError);
68466849 }
68476850
68486851 void findGarbageCode () { // Test Tokenizer::findGarbageCode()
You can’t perform that action at this time.
0 commit comments