PR C++/28906
* init.c (build_new_1): Build a distinct type copy
for the array type that was returned from
build_cplus_array_type.
2006-09-07 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/28906
* g++.dg/other/array3.C: New test.
* g++.dg/other/array4.C: New test.
* g++.dg/other/array5.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116776
138bc75d-0d04-0410-961f-
82ee72b054a4
+2006-09-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/28906
+ * init.c (build_new_1): Build a distinct type copy
+ for the array type that was returned from
+ build_cplus_array_type.
+
2006-09-07 Jason Merrill <jason@redhat.com>
PR c++/27371
2006-09-06 Zak Kipling <zak@transversal.com>
- PR c++/26195
+ PR c++/26195
* decl.c (make_rtl_for_nonlocal_decl),
(start_preparsed_function): Don't use lbasename on
input_filename when calling get_fileinfo.
function context. Methinks that's not it's purvey. So we'll do
our own VLA layout later. */
vla_p = true;
- full_type = build_cplus_array_type (type, NULL_TREE);
index = convert (sizetype, nelts);
index = size_binop (MINUS_EXPR, index, size_one_node);
- TYPE_DOMAIN (full_type) = build_index_type (index);
+ index = build_index_type (index);
+ full_type = build_cplus_array_type (type, NULL_TREE);
+ /* We need a copy of the type as build_array_type will return a shared copy
+ of the incomplete array type. */
+ full_type = build_distinct_type_copy (full_type);
+ TYPE_DOMAIN (full_type) = index;
}
else
{
+2006-09-07 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/28906
+ * g++.dg/other/array3.C: New test.
+ * g++.dg/other/array4.C: New test.
+ * g++.dg/other/array5.C: New test.
+
2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/pr28946.c (dg-options): Use -Os instead -O.
* gfortran.fortran-torture/compile/data_1.f90: Fix integer oveflow
in integer literal constant.
- * gfortran.dg/enum_8.f90: Ditto.
+ * gfortran.dg/enum_8.f90: Ditto.
* gfortran.dg/g77/20030326-1.f: Ditto.
2006-09-07 Feng Wang <fengwang@nudt.edu.cn>
--- /dev/null
+// PR C++/28906: new on an array causes incomplete arrays to
+// become complete with the wrong size.
+
+// the bounds of xvalue_store was being set to include want
+// which was incorrect.
+
+// { dg-do compile }
+
+extern unsigned char xvalue_store[];
+bool reserve (int want)
+{
+ new unsigned char[want];
+}
+unsigned char xvalue_store[257];
--- /dev/null
+// PR C++/28906: new on an array causes incomplete arrays to
+// become complete with the wrong size.
+// The sizeof machineMain should be 5 and not 100.
+// { dg-do run }
+
+
+extern char machineMain[];
+void sort (long len)
+{
+ new char[100];
+}
+char machineMain[] = "main";
+int main(void)
+{
+ if (sizeof(machineMain)!=sizeof("main"))
+ __builtin_abort();
+}
+
+
--- /dev/null
+// Check to make sure changing from an incomplete
+// array type to a complete one does not change other
+// incomplete array type's bounds.
+// { dg-do compile }
+
+extern unsigned char xvalue_store[];
+extern unsigned char xvalue_store1[];
+unsigned char xvalue_store[7];
+unsigned char xvalue_store1[9];