OSDN Git Service

2009-04-11 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Apr 2009 10:30:29 +0000 (10:30 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Apr 2009 10:30:29 +0000 (10:30 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145955 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 9ecdf72..99a09ba 100644 (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.
index a4f43a5..ea4946b 100644 (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);
index aedd017..4acc4b9 100644 (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
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_14.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_14.f90
new file mode 100644 (file)
index 0000000..90037a1
--- /dev/null
@@ -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
+