On 05/26/2014 11:41 AM, Paolo Carlini wrote:
+      /* C++11 8.5/17: "If the destination type is an array of characters,
+        an array of char16_t, an array of char32_t, or an array of wchar_t,
+        and the initializer is a string literal...".  */
+      else if (TREE_CODE (newrhs) == STRING_CST
+              && char_type_p (TREE_TYPE (TYPE_MAIN_VARIANT (lhstype)))
+              && modifycode == INIT_EXPR)
+       {
+         newrhs = digest_init (lhstype, newrhs, complain);
+         if (newrhs == error_mark_node)
+           return error_mark_node;
+       }

This hunk is OK.

       if (TREE_CODE (init) == TREE_LIST
-              && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
+         && TREE_CODE (type) == ARRAY_TYPE
+         /* C++11 8.5/17: "If the destination type is an array of characters,
+            an array of char16_t, an array of char32_t, or an array of wchar_t,
+            and the initializer is a string literal...".  */
+         && !(char_type_p (TREE_TYPE (TYPE_MAIN_VARIANT (type)))
+              && TREE_CODE (TREE_VALUE (init)) == STRING_CST))
        {
          error ("cannot initialize arrays using this syntax");
          return NULL_TREE;

Can we just remove this error rather than add a condition? I think it's covered in other places.

The patch doesn't seem to fix

  char s[] ("foo");

which I think also ought to be well-formed.

Jason

Reply via email to