aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-12-21 01:07:49 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-12-21 01:07:49 +0100
commitd17680f342ef5407303d8c76f8faa0762f83c3f7 (patch)
tree8268dce1899e5e9d07f7988bac438a8b1a05e923 /gcc
parenta388bdc777f582514f8e8bd94274d920d700782f (diff)
downloadgcc-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')
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-decl.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr77767.c16
4 files changed, 39 insertions, 2 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index e17674f..65eb93d 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2016-12-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/77767
+ * c-decl.c (grokdeclarator): If *expr is non-NULL, append expression
+ to *expr instead of overwriting it.
+
2016-12-20 Richard Biener <rguenther@suse.de>
* gimple-parser.c (c_parser_gimple_compound_statement): Improve
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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ccf64d4..f06c53c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-12-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/77767
+ * gcc.c-torture/execute/pr77767.c: New test.
+
2016-12-20 Pat Haugen <pthaugen@us.ibm.com>
* gcc.dg/sms-3.c: Add -fno-sched-pressure for powerpc.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr77767.c b/gcc/testsuite/gcc.c-torture/execute/pr77767.c
new file mode 100644
index 0000000..21725a5
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr77767.c
@@ -0,0 +1,16 @@
+/* PR c/77767 */
+
+void
+foo (int a, int b[a++], int c, int d[c++])
+{
+ if (a != 2 || c != 2)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ int e[10];
+ foo (1, e, 1, e);
+ return 0;
+}