diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index c68b17b50..156049261 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -590,7 +590,7 @@ static void compileTerm(Token *&tok, AST_state& state) tok->astOperand1(tok->next()); tok = tok->tokAt(2); } - if (state.inArrayAssignment && Token::Match(tok->previous(), "[{,] [ %num% ]")) { + if (state.inArrayAssignment && Token::Match(tok->previous(), "[{,] [ %num%|%name% ]")) { state.op.push(tok); tok->astOperand1(tok->next()); tok = tok->tokAt(3); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index c6e7ac5fe..960d80fee 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8078,6 +8078,7 @@ private: ASSERT_EQUALS("s1a&,{2b&,{,{=", testAst("s = { {1, &a}, {2, &b} };")); ASSERT_EQUALS("s0[L.2[x={=", testAst("s = { [0].L[2] = x};")); ASSERT_EQUALS("ac.0={(=", testAst("a = (b){.c=0,};")); // <- useless comma + ASSERT_EQUALS("xB[1y.z.1={(&=,{={=", testAst("x = { [B] = {1, .y = &(struct s) { .z=1 } } };")); // struct initialization hang ASSERT_EQUALS("sbar.1{,{(={= fcmd( forfieldfield++;;(",