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
This commit is contained in:
Janus Weil 2009-04-11 12:30:29 +02:00
parent 32848948c2
commit d1e49db443
4 changed files with 55 additions and 1 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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

View File

@ -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