diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-12-21 01:07:49 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-12-21 01:07:49 +0100 |
commit | d17680f342ef5407303d8c76f8faa0762f83c3f7 (patch) | |
tree | 8268dce1899e5e9d07f7988bac438a8b1a05e923 /gcc/c/c-decl.c | |
parent | a388bdc777f582514f8e8bd94274d920d700782f (diff) | |
download | gcc-d17680f342ef5407303d8c76f8faa0762f83c3f7.zip gcc-d17680f342ef5407303d8c76f8faa0762f83c3f7.tar.gz gcc-d17680f342ef5407303d8c76f8faa0762f83c3f7.tar.bz2 |
re PR c/77767 (Side-effect from VLA array parameters lost)
PR c/77767
* c-decl.c (grokdeclarator): If *expr is non-NULL, append expression
to *expr instead of overwriting it.
* gcc.c-torture/execute/pr77767.c: New test.
From-SVN: r243832
Diffstat (limited to 'gcc/c/c-decl.c')
-rw-r--r-- | gcc/c/c-decl.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index db293fe..eca94c5 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -5580,11 +5580,21 @@ grokdeclarator (const struct c_declarator *declarator, if (TREE_CODE (type) == ERROR_MARK) return error_mark_node; if (expr == NULL) - expr = &expr_dummy; + { + expr = &expr_dummy; + expr_dummy = NULL_TREE; + } if (expr_const_operands == NULL) expr_const_operands = &expr_const_operands_dummy; - *expr = declspecs->expr; + if (declspecs->expr) + { + if (*expr) + *expr = build2 (COMPOUND_EXPR, TREE_TYPE (declspecs->expr), *expr, + declspecs->expr); + else + *expr = declspecs->expr; + } *expr_const_operands = declspecs->expr_const_operands; if (decl_context == FUNCDEF) |