diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-04-11 12:30:29 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-04-11 12:30:29 +0200 |
commit | d1e49db44333c8a937beebeb21e3c33be60ec162 (patch) | |
tree | a3351bfe9f451b4c12f87233dac962a0169370dc /gcc | |
parent | 32848948c2e18df67ac12fe9cf0e2a77e168de06 (diff) | |
download | gcc-d1e49db44333c8a937beebeb21e3c33be60ec162.zip gcc-d1e49db44333c8a937beebeb21e3c33be60ec162.tar.gz gcc-d1e49db44333c8a937beebeb21e3c33be60ec162.tar.bz2 |
re PR fortran/39692 (f95: conflict between EXTERNAL and POINTER)
2009-04-11 Janus Weil <janus@gcc.gnu.org>
PR fortran/39692
* symbol.c (check_conflict): Reject procedure pointers for -std=f95.
2009-04-11 Janus Weil <janus@gcc.gnu.org>
PR fortran/39692
* gfortran.dg/proc_ptr_14.f90: New.
From-SVN: r145955
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/proc_ptr_14.f90 | 40 |
4 files changed, 55 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9ecdf72..99a09ba 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,4 +1,9 @@ -2009-04-11 Daniel Franke <frake.daniel@gmail.com> +2009-04-11 Janus Weil <janus@gcc.gnu.org> + + PR fortran/39692 + * symbol.c (check_conflict): Reject procedure pointers for -std=f95. + +2009-04-11 Daniel Franke <franke.daniel@gmail.com> * resolve.c (resolve_global_procedure): Enable whole-file checking for procedures that are declared later in the file. diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index a4f43a5..ea4946b 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -455,6 +455,10 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where) if ((attr->if_source == IFSRC_DECL && !attr->procedure) || attr->contained) conf (external, subroutine); + if (attr->proc_pointer && gfc_notify_std (GFC_STD_F2003, + "Fortran 2003: Procedure pointer at %C") == FAILURE) + return FAILURE; + conf (allocatable, pointer); conf_std (allocatable, dummy, GFC_STD_F2003); conf_std (allocatable, function, GFC_STD_F2003); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index aedd017..4acc4b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-11 Janus Weil <janus@gcc.gnu.org> + + PR fortran/39692 + * gfortran.dg/proc_ptr_14.f90: New. + 2009-04-11 Richard Guenther <rguenther@suse.de> PR middle-end/39732 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_14.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_14.f90 new file mode 100644 index 0000000..90037a1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_14.f90 @@ -0,0 +1,40 @@ +! { dg-do compile } +! { dg-options "-std=f95" } +! +! PR 39692: f95: conflict between EXTERNAL and POINTER +! +! Test for Procedure Pointers (without PROCEDURE statements) with the -std=f95 flag. +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +pointer :: f +external :: f ! { dg-error "Fortran 2003: Procedure pointer" } + +external :: g +pointer :: g ! { dg-error "Fortran 2003: Procedure pointer" } + +real, pointer, external :: h ! { dg-error "Fortran 2003: Procedure pointer" } + +interface + subroutine i + end subroutine i +end interface +pointer :: i ! { dg-error "Fortran 2003: Procedure pointer" } + +pointer :: j +interface + real function j() + end function j ! { dg-error "Fortran 2003: Procedure pointer" } +end interface + +contains + + function k() ! { dg-error "attribute conflicts with" } + intrinsic sin + external k + pointer k ! { dg-error "Fortran 2003: Procedure pointer" } + real k + end function k + +end + |