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