From: Aldy Hernandez Date: Fri, 30 Jan 2004 00:41:08 +0000 (+0000) Subject: cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors. X-Git-Tag: releases/gcc-3.3.3~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da3ed8e6acf1e018e28178ec2200efbf14c9fa02;p=thirdparty%2Fgcc.git cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors. * 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: r76913 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b7511b3d914f..d6368f4b484e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2004-01-29 Aldy Hernandez + + Backport: + 2003-06-03 Jason Merrill + + * cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors. + + * cp/decl.c (reshape_init): Handle vectors. + + * testsuite/g++.dg/init/array10.C: New. + 2004-01-25 Kriang Lerdsuwanakij PR c++/13797 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index dcff3e95df52..b97520baecac 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -2546,9 +2546,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))) diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 6dda5dbbd311..cbf6d0c40738 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -8240,7 +8240,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); @@ -8285,8 +8286,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);