From 6b86a9bc0536c073a70c7fdb563a36afe2dd6fbf Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Thu, 30 Mar 2006 16:30:26 +0000 Subject: re PR fortran/25031 ([4.1 only] Allocatable array can be reallocated.) 2006-03-30 Thomas Koenig 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 PR fortran/25031 * gfortran.dg/multiple_allocation_1.f90: Check that the size has changed after a re-allocation with stat. From-SVN: r112539 --- libgfortran/ChangeLog | 8 ++++++++ libgfortran/runtime/memory.c | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index c671337..d082c07 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2006-03-30 Thomas Koenig + + 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 PR libgfortran/26880 diff --git a/libgfortran/runtime/memory.c b/libgfortran/runtime/memory.c index 34d70f2..db55a55 100644 --- a/libgfortran/runtime/memory.c +++ b/libgfortran/runtime/memory.c @@ -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; } -- cgit v1.1