diff options
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.cpp | 8 | ||||
-rw-r--r-- | tests/auto/cplusplus/c99/data/designatedInitializer.1.c | 9 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index 19bcd358b57..4f44d614658 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -5696,7 +5696,13 @@ bool Parser::parseDesignatedInitializer(ExpressionAST *&node) if (LA() == T_EQUAL) { ast->equal_token = consumeToken(); - if (parseAssignmentExpression(ast->initializer)) { + + if (LA() == T_LBRACE) { + if (parseBracedInitList0x(node)) { + node = ast; + return true; + } + } else if (parseAssignmentExpression(ast->initializer)) { node = ast; return true; } diff --git a/tests/auto/cplusplus/c99/data/designatedInitializer.1.c b/tests/auto/cplusplus/c99/data/designatedInitializer.1.c index 43db4b66477..dcb482f6d61 100644 --- a/tests/auto/cplusplus/c99/data/designatedInitializer.1.c +++ b/tests/auto/cplusplus/c99/data/designatedInitializer.1.c @@ -7,3 +7,12 @@ int a[10] = {2, 4, [8]=9, 10}; int a[MAX] = { 1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0 }; +struct { + int table [3]; + struct { + int a; + int b; + } parts; +} a[MAX] = { + [2] = { .table = { 8, [1] = 7, 6 }, .parts = { .a = 0, 1 } } +}; |