]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/43453 (Initialization of char array with string literal fails in mem-initia...
authorJason Merrill <jason@redhat.com>
Thu, 5 Jun 2014 20:55:44 +0000 (16:55 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 5 Jun 2014 20:55:44 +0000 (16:55 -0400)
PR c++/43453
* decl.c (check_initializer): Collapse a TREE_LIST here.
* typeck2.c (store_init_value): Not here.

From-SVN: r211290

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/typeck2.c

index 45e10129a98645a0582f8e809a317f7fd6acea51..053155ae4ace31ce911656fce88c0a87977bfe1f 100644 (file)
@@ -1,3 +1,9 @@
+2014-06-05  Jason Merrill  <jason@redhat.com>
+
+       PR c++/43453
+       * decl.c (check_initializer): Collapse a TREE_LIST here.
+       * typeck2.c (store_init_value): Not here.
+
 2014-06-05  Richard Biener  <rguenther@suse.de>
            Paolo Carlini  <paolo.carlini@oracle.com>
 
index b068df83cbf9f5edf9d92b6a771fd5e53b60f825..b4d26b7af512632277d29ea0f58a33d19be252fb 100644 (file)
@@ -5758,13 +5758,16 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
                check_narrowing (type, init);
            }
        }
-      else if (TREE_CODE (type) == ARRAY_TYPE
-              && TREE_CODE (init) == TREE_LIST
-              && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
-              && list_length (init) == 1
-              && TREE_CODE (TREE_VALUE (init)) == STRING_CST)
-       /* We get here with code like `char s[] ("abc");' */
-       init = TREE_VALUE (init);
+      else if (TREE_CODE (init) == TREE_LIST
+              && TREE_TYPE (init) != unknown_type_node
+              && !MAYBE_CLASS_TYPE_P (type))
+       {
+         gcc_assert (TREE_CODE (decl) != RESULT_DECL);
+
+         /* We get here with code like `int a (2);' */
+         init = build_x_compound_expr_from_list (init, ELK_INIT,
+                                                 tf_warning_or_error);
+       }
 
       /* If DECL has an array type without a specific bound, deduce the
         array size from the initializer.  */
index 3ed5c1dd06bfb439a37a200b1114e6f370aa4ae8..a620f22ac5fa472eb45fa373349a0df858d1b281 100644 (file)
@@ -780,15 +780,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
          init = build_constructor_from_list (init_list_type_node, nreverse (init));
        }
     }
-  else if (TREE_CODE (init) == TREE_LIST
-          && TREE_TYPE (init) != unknown_type_node)
-    {
-      gcc_assert (TREE_CODE (decl) != RESULT_DECL);
-
-      /* We get here with code like `int a (2);' */
-      init = build_x_compound_expr_from_list (init, ELK_INIT,
-                                             tf_warning_or_error);
-    }
 
   /* End of special C++ code.  */