re PR c/63567 (Linux kernel build error due to non-static initializers)
authorMarek Polacek <polacek@redhat.com>
Sun, 19 Oct 2014 16:47:35 +0000 (16:47 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Sun, 19 Oct 2014 16:47:35 +0000 (16:47 +0000)
PR c/63567
* c-typeck.c (output_init_element): Allow initializing objects with
static storage duration with compound literals even in C99 and add
pedwarn for it.

* gcc.dg/pr63567-3.c: New test.
* gcc.dg/pr63567-4.c: New test.

From-SVN: r216440

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr63567-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63567-4.c [new file with mode: 0644]

index 35b8dcd968e5e1cb1c8a2ce566a62cdf055f8f9d..397bf285fedebd49b89610a84dcf9e0ece5125b3 100644 (file)
@@ -1,3 +1,10 @@
+2014-10-19  Marek Polacek  <polacek@redhat.com>
+
+       PR c/63567
+       * c-typeck.c (output_init_element): Allow initializing objects with
+       static storage duration with compound literals even in C99 and add
+       pedwarn for it.
+
 2014-10-17  Marek Polacek  <polacek@redhat.com>
 
        PR c/63567
index 0dd33668d29c6de0f2f3ea1118a1d9520b8a58a0..ee874daf758fb86f7dee8aa7d374c79b2f757123 100644 (file)
@@ -8251,11 +8251,14 @@ output_init_element (location_t loc, tree value, tree origtype,
     value = array_to_pointer_conversion (input_location, value);
 
   if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
-      && require_constant_value && !flag_isoc99 && pending)
+      && require_constant_value && pending)
     {
       /* As an extension, allow initializing objects with static storage
         duration with compound literals (which are then treated just as
         the brace enclosed list they contain).  */
+      if (flag_isoc99)
+       pedwarn_init (loc, OPT_Wpedantic, "initializer element is not "
+                     "constant");
       tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
       value = DECL_INITIAL (decl);
     }
index 88b321b07c9164c56eed26cd425895586b49a445..b5c8fb78cd15234ed2344a0a308b22b49cd8e037 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-19  Marek Polacek  <polacek@redhat.com>
+
+       PR c/63567
+       * gcc.dg/pr63567-3.c: New test.
+       * gcc.dg/pr63567-4.c: New test.
+
 2014-10-19  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * gcc.dg/atomic/c11-atomic-exec-5.c
diff --git a/gcc/testsuite/gcc.dg/pr63567-3.c b/gcc/testsuite/gcc.dg/pr63567-3.c
new file mode 100644 (file)
index 0000000..d626406
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR c/63567 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+struct T { int i; };
+struct S { struct T t; };
+struct S s = { .t = { (int) { 1 } } };
diff --git a/gcc/testsuite/gcc.dg/pr63567-4.c b/gcc/testsuite/gcc.dg/pr63567-4.c
new file mode 100644 (file)
index 0000000..0ca6c45
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR c/63567 */
+/* { dg-do compile } */
+/* { dg-options "-Wpedantic" } */
+
+struct T { int i; };
+struct S { struct T t; };
+struct S s = { .t = { (int) { 1 } } }; /* { dg-warning "initializer element is not constant" } */