cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.

2003-06-03  Jason Merrill  <jason@redhat.com>

	* cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.

	* cp/decl.c (reshape_init): Handle vectors.

	* testsuite/g++.dg/init/array10.C: New.

From-SVN: r67414
This commit is contained in:
Jason Merrill 2003-06-03 21:06:09 -04:00 committed by Aldy Hernandez
parent 280c3e883e
commit dbe85b8010
3 changed files with 15 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2003-06-03 Jason Merrill <jason@redhat.com>
* cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.
* cp/decl.c (reshape_init): Handle vectors.
* testsuite/g++.dg/init/array10.C: New.
2003-06-03 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/10940

View File

@ -2397,9 +2397,12 @@ struct lang_decl GTY(())
An aggregate is an array or a class with no user-declared
constructors, no private or protected non-static data members, no
base classes, and no virtual functions. */
base classes, and no virtual functions.
As an extension, we also treat vectors as aggregates. */
#define CP_AGGREGATE_TYPE_P(TYPE) \
(TREE_CODE (TYPE) == ARRAY_TYPE \
|| TREE_CODE (TYPE) == VECTOR_TYPE \
|| (CLASS_TYPE_P (TYPE) \
&& !CLASSTYPE_NON_AGGREGATE (TYPE)))

View File

@ -7438,7 +7438,8 @@ reshape_init (tree type, tree *initp)
/* If the initializer is brace-enclosed, pull initializers from the
enclosed elements. Advance past the brace-enclosed initializer
now. */
if (TREE_CODE (old_init_value) == CONSTRUCTOR
if (TREE_CODE (old_init_value) == CONSTRUCTOR
&& TREE_TYPE (old_init_value) == NULL_TREE
&& TREE_HAS_CONSTRUCTOR (old_init_value))
{
*initp = TREE_CHAIN (old_init);
@ -7483,8 +7484,7 @@ reshape_init (tree type, tree *initp)
non-empty subaggregate, brace elision is assumed and the
initializer is considered for the initialization of the first
member of the subaggregate. */
if (CLASS_TYPE_P (type)
&& !brace_enclosed_p
if (!brace_enclosed_p
&& can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
{
*initp = TREE_CHAIN (old_init);