From b1423947e5bf848c2381a1fbd43f86fa985a2939 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 18 Dec 2007 14:35:20 +0000 Subject: [PATCH] string initializers might be surrounded by {} [r18796] --- parser.c | 22 ++++++++++++++++++---- parsetest/cp_error009.c | 6 ++++++ 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 parsetest/cp_error009.c diff --git a/parser.c b/parser.c index 68b43f6..9a694b1 100644 --- a/parser.c +++ b/parser.c @@ -1077,12 +1077,26 @@ static initializer_t *parse_sub_initializer(type_t *type, initializer_t *sub; had_initializer_brace_warning = false; - if(expression == NULL) { - sub = parse_sub_initializer_elem(element_type); - } else { - sub = parse_sub_initializer(element_type, expression); + + if(token.type == '{') { + return parse_sub_initializer(type, NULL); } + expression = parse_assignment_expression(); + + /* 6.7.8.14 + 15 */ + if(read_paren && (expression->kind == EXPR_STRING_LITERAL + || expression->kind == EXPR_WIDE_STRING_LITERAL)) { + initializer_t *result + = initializer_from_expression(type, expression); + if(result != NULL) { + expect_block('}'); + return result; + } + } + + sub = parse_sub_initializer(type, expression); + /* didn't match the subtypes -> try the parent type */ if(sub == NULL) { assert(!read_paren); diff --git a/parsetest/cp_error009.c b/parsetest/cp_error009.c new file mode 100644 index 0000000..04fd2ab --- /dev/null +++ b/parsetest/cp_error009.c @@ -0,0 +1,6 @@ +char str[] = { "Hallo" }; + +int main(void) { + puts(str); + return 0; +} -- 2.20.1