diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index bc1c7d5ddeb..c6991785ba2 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9469,7 +9469,7 @@ void Tokenizer::findGarbageCode() const if (Token::simpleMatch(tok, ".") && !Token::simpleMatch(tok->previous(), ".") && !Token::simpleMatch(tok->next(), ".") && - !Token::Match(tok->previous(), "{|, . %name% [=.]") && + !Token::Match(tok->previous(), "{|, . %name% =|.|[") && !Token::Match(tok->previous(), ", . %name%")) { if (!Token::Match(tok->previous(), "%name%|)|]|>|}")) syntaxError(tok, tok->strAt(-1) + " " + tok->str() + " " + tok->strAt(1)); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index a14468c82b6..538999f6593 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7968,6 +7968,12 @@ class TestTokenizer : public TestFixture { ASSERT_NO_THROW(tokenizeAndStringify("S s = { .ab.a=2, .ab.b=3 };")); ASSERT_NO_THROW(tokenizeAndStringify("extern \"C\" typedef void FUNC();")); + + // Ticket #9572 + ASSERT_NO_THROW(tokenizeAndStringify("struct poc { " + " struct { int d; } port[1]; " + "}; " + "struct poc p = { .port[0] = {.d = 3} };")); }