re PR fortran/36526 (pointer in pure function)
authorPaul Thomas <pault@gcc.gnu.org>
Wed, 25 Jun 2008 23:04:33 +0000 (23:04 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Wed, 25 Jun 2008 23:04:33 +0000 (23:04 +0000)
2008-06-25  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/36526
* interface.c (check_intents):  Correct error where the actual
arg was checked for a pointer argument, rather than the formal.

2008-06-25  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/36526
* gfortran.dg/proc_formal_proc_2.f90: New test.

From-SVN: r137125

gcc/fortran/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90 [new file with mode: 0644]

index 420218fa57c22bfe0409791563c7baa6b4800946..3490e23fc90505de2a88e0dad74400974703d106 100644 (file)
@@ -1,3 +1,9 @@
+2008-06-25  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/36526
+       * interface.c (check_intents):  Correct error where the actual
+       arg was checked for a pointer argument, rather than the formal.
+
 2008-06-24  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/34371
index c7a274334f8877a9723f4b75c4ac26a734f22284..dc561291140c339aa27e7717357d73b216361850 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-25  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/36526
+       * gfortran.dg/proc_formal_proc_2.f90: New test.
+
 2008-06-25  Richard Guenther  <rguenther@suse.de>
 
        * gcc.c-torture/compile/20080625-1.c: New testcase.
diff --git a/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90 b/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90
new file mode 100644 (file)
index 0000000..ec7d06e
--- /dev/null
@@ -0,0 +1,48 @@
+! { dg-do compile }
+! Tests the fix for PR36526, in which the call to getStrLen would
+! generate an error due to the use of a wrong symbol in interface.c
+!
+! Contributed by Bálint Aradi <aradi@bccms.uni-bremen.de>
+!
+module TestPure
+  implicit none
+
+  type T1
+    character(10) :: str
+  end type T1
+
+contains
+
+  pure function getT1Len(self) result(t1len)
+    type(T1), pointer :: self
+    integer :: t1len
+
+    t1len = getStrLen(self%str)
+
+  end function getT1Len
+
+
+  pure function getStrLen(str) result(length)
+    character(*), intent(in) :: str
+    integer :: length
+
+    length = len_trim(str)
+
+  end function getStrLen
+
+end module TestPure
+
+
+program Test
+  use TestPure
+  implicit none
+
+  type(T1), pointer :: pT1
+
+  allocate(pT1)
+  pT1%str = "test"
+  write (*,*) getT1Len(pT1)
+  deallocate(pT1)
+
+end program Test
+! { dg-final { cleanup-modules "TestPure" } }