re PR fortran/65453 (ICE in build_function_decl, at fortran/trans-decl.c:2001)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 18 Mar 2018 16:33:55 +0000 (16:33 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 18 Mar 2018 16:33:55 +0000 (16:33 +0000)
2018-03-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/65453
* decl.c (get_proc_name): Catch clash between a procedure statement
and a contained subprogram

2018-03-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/65453
* gfortran.dg/pr65453.f90: New test.

From-SVN: r258632

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

index 77a6a8ca7e17d5d9217cd97f43db39a8371b9dd7..0bdc3fe9928b8ee0686f37efa9860113bca2fb0d 100644 (file)
@@ -1,3 +1,9 @@
+2018-03-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/65453
+       * decl.c (get_proc_name): Catch clash between a procedure statement
+       and a contained subprogram
+
 2018-03-16  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/69395
index 104752586b4ebc0791d93abe20a2df2abcc0398b..9ffaa78e587134691632ffd3b72823a1e3daf578 100644 (file)
@@ -1219,6 +1219,12 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
        gfc_error_now ("Procedure %qs at %C is already defined at %L",
                       name, &sym->declared_at);
 
+      if (sym->attr.external && sym->attr.procedure
+         && gfc_current_state () == COMP_CONTAINS)
+       gfc_error_now ("Contained procedure %qs at %C clashes with "
+                       "procedure defined at %L",
+                      name, &sym->declared_at);
+
       /* Trap a procedure with a name the same as interface in the
         encompassing scope.  */
       if (sym->attr.generic != 0
index 7d9a3fd4c2c93c86c7909778a95603379c89f979..71c32f232a82c24dc22bf1a76a975f343e14e117 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/65453
+       * gfortran.dg/pr65453.f90: New test.
+
 2018-03-18  Richard Sandiford  <richard.sandiford@linaro.org>
 
        PR tree-optimization/84913
diff --git a/gcc/testsuite/gfortran.dg/pr65453.f90 b/gcc/testsuite/gfortran.dg/pr65453.f90
new file mode 100644 (file)
index 0000000..8d30116
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! PR fortran/65453
+! Contributed by Tobias Burnus  <burnus at gcc.gnu.org>
+procedure() :: foo   ! { dg-error "(1)" }
+  contains
+    subroutine foo() ! { dg-error "clashes with procedure" }
+    end
+end