From bdf16b1157e7349bfc9a66f354446a682c183c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 26 Apr 2017 20:48:08 +0200 Subject: [PATCH] Tokenizer::simplifyComma: dont simplify comma in '=(struct s){...}' --- lib/tokenize.cpp | 9 +++++++-- test/testsimplifytokens.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 75f28fc62..567773cb5 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -7912,12 +7912,17 @@ void Tokenizer::simplifyComma() if (!tok) syntaxError(nullptr); // invalid code like in #4195 - if (Token::Match(tok, "(|[") || - (tok->str() == "{" && tok->previous() && tok->previous()->str() == "=")) { + + if (Token::Match(tok, "(|[") || Token::Match(tok->previous(), "%name%|= {")) { tok = tok->link(); continue; } + if (Token::simpleMatch(tok, "= (") && Token::simpleMatch(tok->linkAt(1), ") {")) { + tok = tok->linkAt(1)->linkAt(1); + continue; + } + // Skip unhandled template specifiers.. if (tok->link() && tok->str() == "<") tok = tok->link(); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index d79dd89c2..fd5691ab9 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -1966,6 +1966,12 @@ private: "}"; ASSERT_EQUALS(expected, tok(code)); } + + { + const char code[] = "tr = (struct reg){ .a = (1), .c = (2) };"; + const char expected[] = "tr = ( struct reg ) { . a = 1 , . c = 2 } ;"; + ASSERT_EQUALS(expected, tok(code)); + } } void simplifyConditionOperator() {