re PR fortran/28416 (ICE on allocatable codes)
authorErik Edelmann <eedelman@gcc.gnu.org>
Mon, 24 Jul 2006 20:15:59 +0000 (20:15 +0000)
committerErik Edelmann <eedelman@gcc.gnu.org>
Mon, 24 Jul 2006 20:15:59 +0000 (20:15 +0000)
fortran/
2006-07-24  Erik Edelmann  <eedelman@gcc.gnu.org>

        PR fortran/28416
        * trans-array.c (gfc_conv_array_parameter): Give special treatment
        for ALLOCATABLEs if they are themselves dummy variables.

testsuite/
2006-07-24  Erik Edelmann  <eedelman@gcc.gnu.org>

        PR fortran/28416
        * gfortran.dg/allocatable_dummy_3.f90: New.

From-SVN: r115721

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocatable_dummy_3.f90 [new file with mode: 0644]

index df09fcb3052f1d8cc56639420737343cc84d63f8..7940ea5dbcaf8e53554d9e4ed2802499c8b896e4 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-24  Erik Edelmann  <eedelman@gcc.gnu.org>
+
+       PR fortran/28416
+       * trans-array.c (gfc_conv_array_parameter): Give special treatment for
+       ALLOCATABLEs if they are themselves dummy variables.
+
 2006-07-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/25289
index 274ccdbe53320a65b2e6f905e0e89029d513526c..a976cb909318bdf41287769b21b3c4eebd1705ad 100644 (file)
@@ -4524,7 +4524,13 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77)
         }
       if (sym->attr.allocatable)
         {
-          se->expr = gfc_conv_array_data (tmp);
+         if (sym->attr.dummy)
+           {
+             gfc_conv_expr_descriptor (se, expr, ss);
+             se->expr = gfc_conv_array_data (se->expr);
+           }
+         else
+           se->expr = gfc_conv_array_data (tmp);
           return;
         }
     }
index 89ed839a13d569c1df87edd13c6a181d9c09d932..815c7933bfe4df07eefd96b0a83d6e913e42d270 100644 (file)
@@ -1,3 +1,8 @@
+2006-07-24  Erik Edelmann  <eedelman@gcc.gnu.org>
+
+       PR fortran/28416
+       * gfortran.dg/allocatable_dummy_3.f90: New.
+
 2006-07-24  Steven G. Kargl  <kargls@comcast.net>
 
        PR fortran/28439
diff --git a/gcc/testsuite/gfortran.dg/allocatable_dummy_3.f90 b/gcc/testsuite/gfortran.dg/allocatable_dummy_3.f90
new file mode 100644 (file)
index 0000000..d2b4e1e
--- /dev/null
@@ -0,0 +1,39 @@
+! { dg-do run }
+! PR 28416: Check that allocatable dummies can be passed onwards as non-assumed
+! shape arg.
+program main
+
+    implicit none
+    integer, allocatable :: a(:)
+
+    interface
+        subroutine foo(v_out)
+            integer, allocatable :: v_out(:)
+        end subroutine foo
+    end interface
+
+    call foo(a)
+    if (any(a /= [ 1, 2, 3 ])) call abort()
+
+end program
+
+
+subroutine foo(v_out)
+    implicit none
+    integer, allocatable :: v_out(:)
+
+    allocate(v_out(3))
+    call bar(v_out, size(v_out))
+end subroutine foo
+
+
+subroutine bar(v, N)
+    implicit none
+    integer :: N
+    integer :: v(N)
+    integer :: i
+
+    do i = 1, N
+        v(i) = i
+    end do
+end subroutine bar