From c69bfbf495dedb9b59d7663bb03df752b3a6d251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 2 Dec 2020 07:38:21 +0100 Subject: [PATCH] AST: Fixed ast for multidimensional array initialisation --- lib/tokenlist.cpp | 2 +- test/testtokenize.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index dee16d2bc..ad4cde7c2 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -864,7 +864,7 @@ static void compileTerm(Token *&tok, AST_state& state) if (tok->link() != tok->next()) { state.inArrayAssignment++; compileUnaryOp(tok, state, compileExpression); - while (Token::Match(tok, "} [,};]") && state.inArrayAssignment > 0) { + if (Token::Match(tok, "} [,};]") && state.inArrayAssignment > 0) { tok = tok->next(); state.inArrayAssignment--; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 9b57d1f24..0c9c56a8a 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7869,7 +7869,7 @@ private: // function pointer TODO_ASSERT_EQUALS("todo", "va_argapvoid((,(*0=", testAst("*va_arg(ap, void(**) ()) = 0;")); - // struct initialization + // struct/array initialization ASSERT_EQUALS("name_bytes[bits~unusedBits>>unusedBits<<{=", testAst("const uint8_t name_bytes[] = { (~bits >> unusedBits) << unusedBits };")); ASSERT_EQUALS("abuf.0{={=", testAst("a = { .buf = { 0 } };")); ASSERT_EQUALS("ab2[a.0=b.0=,{a.0=b.0=,{,{=", testAst("struct AB ab[2] = { { .a=0, .b=0 }, { .a=0, .b=0 } };")); @@ -7883,6 +7883,7 @@ private: ASSERT_EQUALS("x0fSa.1{=b.2{,c.\"\"=,{(||=", testAst("x = 0 || f(S{.a = { 1 }, .b { 2 }, .c = \"\" });")); ASSERT_EQUALS("a0{,( \"\"abc12:?,", testAst("a(0, {{\"\", (abc) ? 1 : 2}});")); ASSERT_EQUALS("a0{,( \'\'abc12:?,", testAst("a(0, {{\'\', (abc) ? 1 : 2}});")); + ASSERT_EQUALS("x12,{34,{,{56,{78,{,{,{=", testAst("x = { { {1,2}, {3,4} }, { {5,6}, {7,8} } };")); // struct initialization hang ASSERT_EQUALS("sbar.1{,{(={= forfieldfield++;;(",