From c4581bbfb4a20bce2fb9d9dace1f30e4d5a494e8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 7 Jan 2019 23:55:48 +0100 Subject: [PATCH] re PR c/88701 (Internal compiler error for valid program using compound literal with variably modified type.) PR c/88701 * c-decl.c (build_compound_literal): If not TREE_STATIC, only pushdecl if current_function_decl is non-NULL. * gcc.dg/pr88701.c: New test. From-SVN: r267667 --- gcc/c/ChangeLog | 6 ++++++ gcc/c/c-decl.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr88701.c | 18 ++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr88701.c diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 5ee4b66c513..7cffd900c27 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2019-01-07 Jakub Jelinek + + PR c/88701 + * c-decl.c (build_compound_literal): If not TREE_STATIC, only pushdecl + if current_function_decl is non-NULL. + 2019-01-07 Joseph Myers PR c/88720 diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 5c7232f3657..57049f80073 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -5438,7 +5438,7 @@ build_compound_literal (location_t loc, tree type, tree init, bool non_const, pushdecl (decl); rest_of_decl_compilation (decl, 1, 0); } - else + else if (current_function_decl) pushdecl (decl); if (non_const) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ebc96a331bc..72e9d8e47aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-07 Jakub Jelinek + + PR c/88701 + * gcc.dg/pr88701.c: New test. + 2019-01-07 Joseph Myers PR c/88720 diff --git a/gcc/testsuite/gcc.dg/pr88701.c b/gcc/testsuite/gcc.dg/pr88701.c new file mode 100644 index 00000000000..7aa846d1682 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr88701.c @@ -0,0 +1,18 @@ +/* PR c/88701 */ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -pedantic-errors" } */ + +void foo (int [(int (*)[1]) { 0 } == 0]); +void bar (int n, int [(int (*)[n]) { 0 } == 0]); + +int +baz (int a[(int (*)[1]) { 0 } == 0]) +{ + return a[0]; +} + +int +qux (int n, int a[(int (*)[n]) { 0 } == 0]) +{ + return a[0] + n; +} -- 2.30.2