]> gcc.gnu.org Git - gcc.git/commitdiff
re PR fortran/37926 (Program gives wrong output (connected to char len))
authorPaul Thomas <pault@gcc.gnu.org>
Sat, 15 Nov 2008 17:26:13 +0000 (17:26 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sat, 15 Nov 2008 17:26:13 +0000 (17:26 +0000)
2008-11-15  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/37926
        * trans-expr.c (gfc_add_interface_mapping): Transfer the formal
arglist and the always_explicit attribute if the dummy arg is a
procedure.

2008-11-15  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/37926
        * gfortran.dg/dummy_procedure_3.f90: New test.

From-SVN: r141890

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

index c3b58b5312caa7a18674118120cff0036ad2b54f..35466d421847fcd10b5dc31d0aa035e0a2fc5e34 100644 (file)
@@ -1,3 +1,10 @@
+2008-11-15  Paul Thomas  <pault@gcc.gnu.org>
+
+        PR fortran/37926
+        * trans-expr.c (gfc_add_interface_mapping): Transfer the formal
+       arglist and the always_explicit attribute if the dummy arg is a
+       procedure.
+
 2008-11-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/37988
index a3265ace7564d3db0eea7b9ae102404b872db4b7..ff74928d63e13051fc4cb4b53f76af1e291be36d 100644 (file)
@@ -1711,6 +1711,15 @@ gfc_add_interface_mapping (gfc_interface_mapping * mapping,
   new_sym->attr.flavor = sym->attr.flavor;
   new_sym->attr.function = sym->attr.function;
 
+  /* Ensure that the interface is available and that
+     descriptors are passed for array actual arguments.  */
+  if (sym->attr.flavor == FL_PROCEDURE)
+    {
+      copy_formal_args (new_sym, expr->symtree->n.sym);
+      new_sym->attr.always_explicit
+           = expr->symtree->n.sym->attr.always_explicit;
+    }
+
   /* Create a fake symtree for it.  */
   root = NULL;
   new_symtree = gfc_new_symtree (&root, sym->name);
index 3ff73d29ab3b9382706347296ed69e8ba77d2d1b..78a345a1eb3ac877c6f1e31eb1e36dc222667ed1 100644 (file)
@@ -1,3 +1,8 @@
+2008-11-15  Paul Thomas  <pault@gcc.gnu.org>
+
+        PR fortran/37926
+        * gfortran.dg/dummy_procedure_3.f90: New test.
+
 2008-11-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/38123
diff --git a/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90 b/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90
new file mode 100644 (file)
index 0000000..cde2f01
--- /dev/null
@@ -0,0 +1,40 @@
+! { dg-do run }
+! PR37926 - the interface did not transfer the formal
+! argument list for the call to 'asz' in the specification of 'p'.
+!
+! Contributed by Janus Weil  <janus@gcc.gnu.org>
+!
+module m
+contains
+  pure integer function mysize(a)
+    integer,intent(in) :: a(:)
+    mysize = size(a)
+  end function
+end module
+
+program prog
+  use m
+  implicit none
+  character(3) :: str
+  integer :: i(3) = (/1,2,3/)
+  str = p(i,mysize)
+  if (len(str) .ne. 3) call abort
+  if (str .ne. "BCD") call abort
+contains
+  function p(y,asz)
+    implicit none
+    integer :: y(:)
+    interface
+      pure integer function asz(c)
+        integer,intent(in) :: c(:)
+      end function
+    end interface
+    character(asz(y)) p
+    integer i
+    do i=1,asz(y)
+      p(i:i) = achar(iachar('A')+y(i))
+    end do
+  end function
+end
+! { dg-final { cleanup-modules "m" } }
+
This page took 0.108476 seconds and 5 git commands to generate.