]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2009-06-12 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Jun 2009 20:39:39 +0000 (20:39 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Jun 2009 20:39:39 +0000 (20:39 +0000)
PR fortran/40176
* resolve.c (resolve_symbol): Additional error check, preventing an
infinite loop.

2009-06-12  Janus Weil  <janus@gcc.gnu.org>

PR fortran/40176
* gfortran.dg/proc_decl_1.f90: Extended.

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

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/proc_decl_1.f90

index 2f0ff9dee8cc7b0b685afb3373c84d62c67fcdad..c9025f1a8d060ad0f022bbadd22beacd0a64feb5 100644 (file)
@@ -1,3 +1,9 @@
+2009-06-12  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/40176
+       * resolve.c (resolve_symbol): Additional error check, preventing an
+       infinite loop.
+
 2009-06-11  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/40402
index 04e03cc659b6c6ca9e9e3943bb3b7a09903ea6e3..fdde894c63900168b92cf8e8dd34ff7e2570dc61 100644 (file)
@@ -9406,10 +9406,19 @@ resolve_symbol (gfc_symbol *sym)
   if (sym->attr.procedure && sym->ts.interface
       && sym->attr.if_source != IFSRC_DECL)
     {
+      if (sym->ts.interface == sym)
+       {
+         gfc_error ("PROCEDURE '%s' at %L may not be used as its own "
+                    "interface", sym->name, &sym->declared_at);
+         return;
+       }
       if (sym->ts.interface->attr.procedure)
-       gfc_error ("Interface '%s', used by procedure '%s' at %L, is declared "
-                  "in a later PROCEDURE statement", sym->ts.interface->name,
-                  sym->name,&sym->declared_at);
+       {
+         gfc_error ("Interface '%s', used by procedure '%s' at %L, is declared"
+                    " in a later PROCEDURE statement", sym->ts.interface->name,
+                    sym->name,&sym->declared_at);
+         return;
+       }
 
       /* Get the attributes from the interface (now resolved).  */
       if (sym->ts.interface->attr.if_source
index 8904945838fda71b51efd771819cff6ac14bf2a0..c7801d77376d746f16c543196d8a13cf16dd98bb 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-12  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/40176
+       * gfortran.dg/proc_decl_1.f90: Extended.
+
 2009-06-12  Ian Lance Taylor  <iant@google.com>
 
        * gcc.dg/Wcxx-compat-13.c: New testcase.
index 25c018301f31e341d85c7571d6d02d5aabcc8652..c7ec4f2f3fc8e376efbefecbd9704da1b3bcda6f 100644 (file)
@@ -57,6 +57,8 @@ program prog
   procedure ( ) :: r 
   procedure ( up ) :: s  ! { dg-error "must be explicit" }
 
+  procedure(t) :: t  ! { dg-error "may not be used as its own interface" }
+
   call s
 
 contains