re PR fortran/25031 ([4.1 only] Allocatable array can be reallocated.)

2006-03-30  Thomas Koenig  <Thomas.Koenig@online.de>

	PR fortran/25031
	* runtime/memory.c (allocate_array):  If stat is present and
	the variable is already allocated, free the variable, do
	the allocation and set stat.
	(allocate_array_64):  Likewise.  Whitespace fix.

2006-03-30  Thomas Koenig  <Thomas.Koenig@online.de>

	PR fortran/25031
	* gfortran.dg/multiple_allocation_1.f90:  Check that the
	size has changed after a re-allocation with stat.

From-SVN: r112539
This commit is contained in:
Thomas Koenig 2006-03-30 16:30:26 +00:00 committed by Thomas Koenig
parent c7ec547267
commit 6b86a9bc05
4 changed files with 30 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2006-03-30 Thomas Koenig <Thomas.Koenig@online.de>
PR fortran/25031
* gfortran.dg/multiple_allocation_1.f90: Check that the
size has changed after a re-allocation with stat.
2006-03-30 Richard Guenther <rguenther@suse.de>
* gcc.target/i386/sselibm-1.c: Adjust for libgcc-math partial

View File

@ -8,10 +8,11 @@ program alloc_test
integer, pointer :: b(:)
allocate(a(4))
! This should set the stat code without changing the size
allocate(a(4),stat=i)
! This should set the stat code and change the size.
allocate(a(3),stat=i)
if (i == 0) call abort
if (.not. allocated(a)) call abort
if (size(a) /= 3) call abort
! It's OK to allocate pointers twice (even though this causes
! a memory leak)
allocate(b(4))

View File

@ -1,3 +1,11 @@
2006-03-30 Thomas Koenig <Thomas.Koenig@online.de>
PR fortran/25031
* runtime/memory.c (allocate_array): If stat is present and
the variable is already allocated, free the variable, do
the allocation and set stat.
(allocate_array_64): Likewise. Whitespace fix.
2006-03-26 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/26880

View File

@ -249,7 +249,12 @@ allocate_array (void **mem, GFC_INTEGER_4 size, GFC_INTEGER_4 * stat)
return;
}
if (stat)
*stat = ERROR_ALLOCATION;
{
free (*mem);
allocate (mem, size, stat);
*stat = ERROR_ALLOCATION;
return;
}
else
runtime_error ("Attempting to allocate already allocated array.");
@ -272,10 +277,15 @@ allocate64_array (void **mem, GFC_INTEGER_8 size, GFC_INTEGER_4 * stat)
return;
}
if (stat)
*stat = ERROR_ALLOCATION;
{
free (*mem);
allocate (mem, size, stat);
*stat = ERROR_ALLOCATION;
return;
}
else
runtime_error ("Attempting to allocate already allocated array.");
return;
}