https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63567

--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Thanks.  This fixes it (I need to write a proper testcase and test it).

2014-10-18  Marek Polacek  <pola...@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.

diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 0dd3366..ee874da 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -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);
     }

Reply via email to