]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/39692 (f95: conflict between EXTERNAL and POINTER)
authorJanus Weil <janus@gcc.gnu.org>
Sat, 11 Apr 2009 10:30:29 +0000 (12:30 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Sat, 11 Apr 2009 10:30:29 +0000 (12:30 +0200)
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

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

index 9ecdf7272bdb4a80b904856b9e5f65fb096210b4..99a09badef9c164600db765b98fb59095e143ab5 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 a4f43a5f6700ebb182ba97f7cc07556fca9495ff..ea4946b8850948f1a2c6666fd263666e1c2053d9 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 aedd017f189aa0235f7e6a77c977d9ffb75e56a2..4acc4b9d0010d56708866032f9c3ac4b338cec1f 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
+