diff options
author | Janus Weil <janus@gcc.gnu.org> | 2010-06-29 23:40:38 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2010-06-29 23:40:38 +0200 |
commit | 68d8db775f3dd767387136cd3baf47cba087d9a6 (patch) | |
tree | 8e60b5a9f8007667fa7969b5e7dcedfbdefd5183 /gcc | |
parent | 4d64faec41ba5da430b37ddfdf6bfdafa5cf6d83 (diff) | |
download | gcc-68d8db775f3dd767387136cd3baf47cba087d9a6.zip gcc-68d8db775f3dd767387136cd3baf47cba087d9a6.tar.gz gcc-68d8db775f3dd767387136cd3baf47cba087d9a6.tar.bz2 |
re PR fortran/44718 (Procedure-pointer name is wrongly regarded as "external procedure")
2010-06-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/44718
* resolve.c (is_external_proc): Prevent procedure pointers from being
regarded as external procedures.
2010-06-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/44718
* gfortran.dg/proc_ptr_28.f90: New.
From-SVN: r161569
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/proc_ptr_28.f90 | 39 |
4 files changed, 51 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a838747..1850913 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2010-06-29 Janus Weil <janus@gcc.gnu.org> + PR fortran/44718 + * resolve.c (is_external_proc): Prevent procedure pointers from being + regarded as external procedures. + +2010-06-29 Janus Weil <janus@gcc.gnu.org> + PR fortran/44696 * trans-intrinsic.c (gfc_conv_associated): Handle polymorphic variables passed as second argument of ASSOCIATED. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 96b3e8d..4e11fc6 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2259,6 +2259,7 @@ is_external_proc (gfc_symbol *sym) && !(sym->attr.intrinsic || gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)) && sym->attr.proc != PROC_ST_FUNCTION + && !sym->attr.proc_pointer && !sym->attr.use_assoc && sym->name) return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9fbbaf4..4e37174 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-29 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44718 + * gfortran.dg/proc_ptr_28.f90: New. + 2010-06-29 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/43801 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 new file mode 100644 index 0000000..8754d8e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 @@ -0,0 +1,39 @@ +! { dg-do compile } +! +! PR 44718: Procedure-pointer name is wrongly regarded as "external procedure" +! +! Contributed by John McFarland <john.mcfarland@swri.org> + +MODULE m + + IMPLICIT NONE + +CONTAINS + + FUNCTION func(x) RESULT(y) + INTEGER :: x,y + y = x *2 + END FUNCTION func + + SUBROUTINE sub(x) + INTEGER :: x + PRINT*, x + END SUBROUTINE sub + + + SUBROUTINE use_func() + PROCEDURE(func), POINTER :: f + INTEGER :: y + f => func + y = f(2) + END SUBROUTINE use_func + + SUBROUTINE use_sub() + PROCEDURE(sub), POINTER :: f + f => sub + CALL f(2) + END SUBROUTINE use_sub + +END MODULE m + +! { dg-final { cleanup-modules "m" } } |