re PR fortran/82992 (ICE in create_int_parameter_array, at fortran/module.c:6586)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 17 Aug 2019 17:15:42 +0000 (17:15 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 17 Aug 2019 17:15:42 +0000 (17:15 +0000)
2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/82992
* module.c (gfc_match_use):  When renaming a module entity, search
current namespace for conflicting symbol.

2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/82992
* gfortran.dg/pr71649.f90: Adjust error messages.
* gfortran.dg/use_15.f90: Ditto.
* gfortran.dg/use_rename_8.f90: Ditto.

From-SVN: r274608

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr71649.f90
gcc/testsuite/gfortran.dg/use_15.f90
gcc/testsuite/gfortran.dg/use_rename_8.f90

index 21593de0179468bcf8c4533dc1bf520092aaca5d..9af58369cc1b8b90b9954aafee67f189b608e320 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/82992
+       * module.c (gfc_match_use):  When renaming a module entity, search
+       current namespace for conflicting symbol.
+
 2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/78739
index 9c8ae13e0efd4ada226d7ffae36591450f0ade49..fb6173dcde3bd45ef1504733e9ccac0d1d14fbb7 100644 (file)
@@ -525,6 +525,8 @@ gfc_match_use (void)
   gfc_intrinsic_op op;
   match m;
   gfc_use_list *use_list;
+  gfc_symtree *st;
+  locus loc;
 
   use_list = gfc_get_use_list ();
 
@@ -632,6 +634,8 @@ gfc_match_use (void)
        case INTERFACE_USER_OP:
        case INTERFACE_GENERIC:
        case INTERFACE_DTIO:
+         loc = gfc_current_locus;
+
          m = gfc_match (" =>");
 
          if (type == INTERFACE_USER_OP && m == MATCH_YES
@@ -642,6 +646,18 @@ gfc_match_use (void)
          if (type == INTERFACE_USER_OP)
            new_use->op = INTRINSIC_USER;
 
+         st = gfc_find_symtree (gfc_current_ns->sym_root, name);
+         if (st)
+           {
+             if (m == MATCH_YES)
+               gfc_error ("Symbol %qs at %L conflicts with the rename symbol "
+                          "at %L", name, &st->n.sym->declared_at, &loc);
+             else
+               gfc_error ("Symbol %qs at %L conflicts with the symbol "
+                          "at %L", name, &st->n.sym->declared_at, &loc);
+             goto cleanup;
+           }
+
          if (use_list->only_flag)
            {
              if (m != MATCH_YES)
index 8eecb3b96a480e80fd4b067666c81deead8e5a42..0eb47a644b2904f8d680c95dc70898d68c3d988d 100644 (file)
@@ -1,3 +1,10 @@
+2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/82992
+       * gfortran.dg/pr71649.f90: Adjust error messages.
+       * gfortran.dg/use_15.f90: Ditto.
+       * gfortran.dg/use_rename_8.f90: Ditto.
+
 2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/78739
index f20b7687e6f330ad4d98cd59f3fe3cfc4dfe45b3..c01389acfcf743049f71a664e19a2f0492b53778 100644 (file)
@@ -1,13 +1,13 @@
 ! { dg-do compile }
 ! PR71649 Internal Compiler Error
-SUBROUTINE Compiler_Options ( Options, Version, WriteOpt )
-   USE ISO_FORTRAN_ENV, ONLY : Compiler_Version, Compiler_Options ! { dg-error "already declared" }
+SUBROUTINE Compiler_Options ( Options, Version, WriteOpt )        ! { dg-error "\(1\)" }
+   USE ISO_FORTRAN_ENV, ONLY : Compiler_Version, Compiler_Options ! { dg-error "conflicts with the" }
    IMPLICIT NONE
    CHARACTER (LEN=*), INTENT(OUT) :: Options
    CHARACTER (LEN=*), INTENT(OUT) :: Version
    LOGICAL, INTENT(IN), OPTIONAL  :: WriteOpt
-   Version = Compiler_Version()
-   Options = Compiler_Options() ! { dg-error "Unexpected use of subroutine name" }
+   Version = Compiler_Version()  ! { dg-error "has no IMPLICIT type" }
+   Options = Compiler_Options()  ! { dg-error "Unexpected use of subroutine name" }
    RETURN
 END SUBROUTINE Compiler_Options
 
index bd5920aa03363cca10a702c2585fb4b5e2a544cc..eb5aa87cc8b77327bbd0873a4bb347802ebd21ee 100644 (file)
@@ -28,8 +28,8 @@ subroutine my_sub2 (a)
 end subroutine
 
 
-subroutine my_sub3 (a)
-  use test_mod2, my_sub3 => my_sub2  ! { dg-error "is also the name of the current program unit" }
+subroutine my_sub3 (a)              ! { dg-error "\(1\)" }
+  use test_mod2, my_sub3 => my_sub2 ! { dg-error "conflicts with the rename" }
   real a
   print *, a
 end subroutine
index ad3ab3977c5b796f78512b47d96d72510ae4d4b1..b8b49d7a0525e06579b4aed42ca606b22a86dce8 100644 (file)
@@ -19,8 +19,8 @@ SUBROUTINE T
     USE MOO, ONLY: X => B
 END SUBROUTINE T
 
-SUBROUTINE C
-    USE MOO, ONLY: C  ! { dg-error "is also the name of the current program unit" }
+SUBROUTINE C          ! { dg-error "\(1\)" }
+    USE MOO, ONLY: C  ! { dg-error "conflicts with the" }
 END SUBROUTINE C
 
 SUBROUTINE D
@@ -36,15 +36,15 @@ SUBROUTINE F
     USE MOO, ONLY: X => F
 END SUBROUTINE F
 
-SUBROUTINE X
-    USE MOO, ONLY: X => G ! { dg-error "is also the name of the current program unit" }
+SUBROUTINE X              ! { dg-error "\(1\)" }
+    USE MOO, ONLY: X => G ! { dg-error "conflicts with the rename" }
 END SUBROUTINE X
 
-SUBROUTINE Y
-    USE MOO, ONLY: Y => H ! { dg-error "is also the name of the current program unit" }
+SUBROUTINE Y              ! { dg-error "\(1\)" }
+    USE MOO, ONLY: Y => H ! { dg-error "conflicts with the rename" }
 END SUBROUTINE Y
 
-SUBROUTINE Z
-    USE MOO, ONLY: Z => I, Z => I ! { dg-error "is also the name of the current program unit" }
+SUBROUTINE Z                        ! { dg-error "\(1\)" }
+    USE MOO, ONLY: Z => I, Z => I   ! { dg-error "conflicts with the rename" }
 END SUBROUTINE Z