Commit 40e3a2ab by Jason Merrill Committed by Jason Merrill

re PR c++/43453 (Initialization of char array with string literal fails in mem-initializer)

	PR c++/43453
	* decl.c (check_initializer): Collapse a TREE_LIST here.
	* typeck2.c (store_init_value): Not here.

From-SVN: r211290
parent 9bac5cbb
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> 2014-06-05 Richard Biener <rguenther@suse.de>
Paolo Carlini <paolo.carlini@oracle.com> Paolo Carlini <paolo.carlini@oracle.com>
......
...@@ -5758,13 +5758,16 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups) ...@@ -5758,13 +5758,16 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
check_narrowing (type, init); check_narrowing (type, init);
} }
} }
else if (TREE_CODE (type) == ARRAY_TYPE else if (TREE_CODE (init) == TREE_LIST
&& TREE_CODE (init) == TREE_LIST && TREE_TYPE (init) != unknown_type_node
&& char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))) && !MAYBE_CLASS_TYPE_P (type))
&& list_length (init) == 1 {
&& TREE_CODE (TREE_VALUE (init)) == STRING_CST) gcc_assert (TREE_CODE (decl) != RESULT_DECL);
/* We get here with code like `char s[] ("abc");' */
init = TREE_VALUE (init); /* 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 /* If DECL has an array type without a specific bound, deduce the
array size from the initializer. */ array size from the initializer. */
......
...@@ -780,15 +780,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags) ...@@ -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)); 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. */ /* End of special C++ code. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment