diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/c/c-typeck.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr64856.c | 13 |
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 } } }; |