aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <mpolacek@gcc.gnu.org>2015-02-09 21:19:02 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2015-02-09 21:19:02 +0000
commitc3e38a03df5f6074fd83d06c2c8d7393b0446026 (patch)
tree436bdfafd11d4124941fb10799652f5acdb9859d /gcc
parent6248441777104cf224e58669aaeb858310b9f668 (diff)
downloadgcc-c3e38a03df5f6074fd83d06c2c8d7393b0446026.zip
gcc-c3e38a03df5f6074fd83d06c2c8d7393b0446026.tar.gz
gcc-c3e38a03df5f6074fd83d06c2c8d7393b0446026.tar.bz2
re PR c/64856 (Initializing struct not accepted in gnu99)
PR c/64856 * c-typeck.c (process_init_element): Don't always wrap COMPOUND_LITERAL_EXPR in a SAVE_EXPR in C99 mode when initializing a range of elements. * gcc.dg/pr64856.c: New test. From-SVN: r220550
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c/ChangeLog9
-rw-r--r--gcc/c/c-typeck.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr64856.c13
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 4c822f4..fa5774c 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,10 +1,17 @@
+2015-02-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/64856
+ * c-typeck.c (process_init_element): Don't always wrap
+ COMPOUND_LITERAL_EXPR in a SAVE_EXPR in C99 mode when
+ initializing a range of elements.
+
2015-02-04 Jakub Jelinek <jakub@redhat.com>
PR c/64824
PR c/64868
* c-parser.c (c_parser_omp_atomic): Handle RDIV_EXPR.
-2015-02-02 Bruno Loff <bruno.loff@gmail.com>
+2015-02-02 Bruno Loff <bruno.loff@gmail.com>
* c-parser.c (c_parser_declspecs): Call invoke_plugin_callbacks after
processing enum declaration.
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 65c6f7f..a3a9c77 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -8785,8 +8785,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
/* If value is a compound literal and we'll be just using its
content, don't put it into a SAVE_EXPR. */
if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
- || !require_constant_value
- || flag_isoc99)
+ || !require_constant_value)
{
tree semantic_type = NULL_TREE;
if (TREE_CODE (value.value) == EXCESS_PRECISION_EXPR)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4fd0397..3d14e60 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/64856
+ * gcc.dg/pr64856.c: New test.
+
2015-02-09 Jakub Jelinek <jakub@redhat.com>
PR target/64979
diff --git a/gcc/testsuite/gcc.dg/pr64856.c b/gcc/testsuite/gcc.dg/pr64856.c
new file mode 100644
index 0000000..c21d95a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr64856.c
@@ -0,0 +1,13 @@
+/* PR c/64856 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+struct A {
+ unsigned long b;
+};
+
+struct B {
+ struct A c[5];
+};
+
+struct B d = { .c = { [0 ... 4] = (struct A){ .b = 2 } } };