+2007-06-29 Dave Brolley <brolley@redhat.com>
+
+ PR c++/31743
+ * parser.c (cp_parser_new_type_id): Don't reduce a named array
+ type to its base type and number of elements here.
+ * init.c (build_new): Call complete_type_or_else to ensure that the
+ type is complete and to issue a diagnostic if it is not.
+ (build_new_1): Don't call complete_type_or_else here.
+
2007-07-03 Richard Guenther <rguenther@suse.de>
PR c++/32609
}
}
- if (!complete_type_or_else (type, NULL_TREE))
- return error_mark_node;
-
/* If our base type is an array, then make sure we know how many elements
it has. */
for (elt_type = type;
return error_mark_node;
}
+ /* PR 31743: Make sure the array type has a known size. */
+ if (!complete_type_or_else (type, NULL_TREE))
+ return error_mark_node;
+
rval = build_new_1 (placement, type, nelts, init, use_global_new);
if (rval == error_mark_node)
return error_mark_node;
}
type = groktypename (&type_specifier_seq, new_declarator);
- if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
- {
- *nelts = array_type_nelts_top (type);
- type = TREE_TYPE (type);
- }
return type;
}
+2007-06-29 Dave Brolley <brolley@redhat.com>
+
+ PR c++/31743
+ * g++.dg/init/new20.C: New test.
+
2007-07-03 Christopher D. Rickett <crickett@lanl.gov>
PR fortran/32579
--- /dev/null
+// PR c++/31743\r
+typedef int A[];\r
+A* p = new A; // { dg-error "invalid use of array with unspecified bounds" }\r
+A* q = new (A); // { dg-error "invalid use of array with unspecified bounds" }\r
+\r
+\r