From b9acaab20d74f18aa3c84616031fe4473c2cf469 Mon Sep 17 00:00:00 2001 From: chrchr Date: Fri, 7 Jul 2023 13:15:04 +0200 Subject: [PATCH] Fix #11814 FP unknownMacro with designated initializer --- lib/tokenize.cpp | 2 +- test/testtokenize.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 21efa72c1b3..9b5c4f07850 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -8058,7 +8058,7 @@ void Tokenizer::reportUnknownMacros() const // Report unknown macros before } "{ .. if (x) MACRO }" for (const Token *tok = tokens(); tok; tok = tok->next()) { - if (Token::Match(tok, ")|; %name% }")) { + if (Token::Match(tok, ")|; %name% } !!)")) { const Token* prev = tok->linkAt(2); while (Token::simpleMatch(prev, "{")) prev = prev->previous(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 3688748c349..0ff011e8637 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -6876,6 +6876,10 @@ class TestTokenizer : public TestFixture { ASSERT_THROW(tokenizeAndStringify("void foo() { if(x) SYSTEM_ERROR }"), InternalError); ASSERT_THROW(tokenizeAndStringify("void foo() { dostuff(); SYSTEM_ERROR }"), InternalError); + + ASSERT_NO_THROW(tokenizeAndStringify("void f(void* q) {\n" + " g(&(S) { .p = (int*)q });\n" + "}\n", /*expand*/ true, cppcheck::Platform::Type::Native, "test.c")); } void findGarbageCode() { // Test Tokenizer::findGarbageCode()