OSDN Git Service

2006-03-30 Thomas Koenig <Thomas.Koenig@online.de>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Mar 2006 16:30:26 +0000 (16:30 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Mar 2006 16:30:26 +0000 (16:30 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112539 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/multiple_allocation_1.f90
libgfortran/ChangeLog
libgfortran/runtime/memory.c

index 53f2522..018e11c 100644 (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
index 9c14248..2b91373 100644 (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))
index c671337..d082c07 100644 (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
index 34d70f2..db55a55 100644 (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;
 }