diff options
author | Jason Merrill <jason@redhat.com> | 2003-06-03 21:06:09 -0400 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2003-06-04 01:06:09 +0000 |
commit | dbe85b8010d4f19d60c14f70e70f97978a29960a (patch) | |
tree | 6c55475f3504ad73657d3bc408dacdb1bfec650f /gcc | |
parent | 280c3e883e43e63b73071cc4d2a80028a775b55e (diff) | |
download | gcc-dbe85b8010d4f19d60c14f70e70f97978a29960a.zip gcc-dbe85b8010d4f19d60c14f70e70f97978a29960a.tar.gz gcc-dbe85b8010d4f19d60c14f70e70f97978a29960a.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 6 |
3 files changed, 15 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 158db73..24e4f77 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 0fecbea..b72fb17 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -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))) diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4355df5..705f5a0 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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); |