aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2000-08-10 12:32:40 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2000-08-10 12:32:40 +0000
commitaa54df09011ad2e4a9f735c04d4f018cad0fe2b2 (patch)
treebc2037fcbc2f3005040ea333b55d9ae3aa6e6ccd
parentaf6573958166cb5d27a00fa31de4e54972161469 (diff)
downloadgcc-aa54df09011ad2e4a9f735c04d4f018cad0fe2b2.zip
gcc-aa54df09011ad2e4a9f735c04d4f018cad0fe2b2.tar.gz
gcc-aa54df09011ad2e4a9f735c04d4f018cad0fe2b2.tar.bz2
init.c (build_aggr_init): Reject bogus array initializers early.
* init.c (build_aggr_init): Reject bogus array initializers early. From-SVN: r35605
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/init.c17
2 files changed, 14 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8912264..dc4e4c9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2000-08-10 Nathan Sidwell <nathan@codesourcery.com>
+
+ * init.c (build_aggr_init): Reject bogus array initializers
+ early.
+
2000-08-09 Nathan Sidwell <nathan@codesourcery.com>
* rtti.c (build_dynamic_cast_1): Set "C" linkage for new abi
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index d995e06..c35babb 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1186,13 +1186,8 @@ build_aggr_init (exp, init, flags)
/* Must arrange to initialize each element of EXP
from elements of INIT. */
tree itype = init ? TREE_TYPE (init) : NULL_TREE;
- if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
- {
- TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
- if (init)
- TREE_TYPE (init) = TYPE_MAIN_VARIANT (itype);
- }
- if (init && TREE_TYPE (init) == NULL_TREE)
+
+ if (init && !itype)
{
/* Handle bad initializers like:
class COMPLEX {
@@ -1206,9 +1201,15 @@ build_aggr_init (exp, init, flags)
COMPLEX zees(1.0, 0.0)[10];
}
*/
- error ("bad array initializer");
+ cp_error ("bad array initializer");
return error_mark_node;
}
+ if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
+ {
+ TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
+ if (init)
+ TREE_TYPE (init) = TYPE_MAIN_VARIANT (itype);
+ }
stmt_expr = build_vec_init (exp, exp, array_type_nelts (type), init,
init && same_type_p (TREE_TYPE (init),
TREE_TYPE (exp)));