From 811d3cd3df6ac9847ab3de583c0e03d941bd6898 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Wed, 25 Jun 2008 23:04:33 +0000 Subject: [PATCH] re PR fortran/36526 (pointer in pure function) 2008-06-25 Paul Thomas 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 PR fortran/36526 * gfortran.dg/proc_formal_proc_2.f90: New test. From-SVN: r137125 --- gcc/fortran/ChangeLog | 6 +++ gcc/testsuite/ChangeLog | 5 ++ .../gfortran.dg/pure_formal_proc_2.f90 | 48 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 420218fa57c..3490e23fc90 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-06-25 Paul Thomas + + 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 PR fortran/34371 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c7a274334f8..dc561291140 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-06-25 Paul Thomas + + PR fortran/36526 + * gfortran.dg/proc_formal_proc_2.f90: New test. + 2008-06-25 Richard Guenther * 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 index 00000000000..ec7d06eec78 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90 @@ -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 +! +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" } } -- 2.30.2