006-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  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.

From-SVN: r116776
This commit is contained in:
Andrew Pinski 2006-09-07 19:49:11 -07:00
parent d0655f33aa
commit 158d56c4e2
6 changed files with 64 additions and 4 deletions

View File

@ -1,3 +1,10 @@
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
@ -15,7 +22,7 @@
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.

View File

@ -1628,10 +1628,14 @@ build_new_1 (tree placement, tree type, tree nelts, tree init,
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
{

View File

@ -1,3 +1,10 @@
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.
@ -11,7 +18,7 @@
* 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>

View File

@ -0,0 +1,14 @@
// 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];

View File

@ -0,0 +1,19 @@
// 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();
}

View File

@ -0,0 +1,9 @@
// 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];