summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2019-08-17 17:15:42 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2019-08-17 17:15:42 +0000
commitb9a21efdea18862f79c68ceb2eee0704844ead53 (patch)
treea444631882998d3b411bc5adb6625e7f311ec123
parent716ac0fc6c0ef0f1bf3a295f1338eeb697cddb43 (diff)
re PR fortran/82992 (ICE in create_int_parameter_array, at fortran/module.c:6586)
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
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/module.c16
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/pr71649.f908
-rw-r--r--gcc/testsuite/gfortran.dg/use_15.f904
-rw-r--r--gcc/testsuite/gfortran.dg/use_rename_8.f9016
6 files changed, 43 insertions, 14 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 21593de0179..9af58369cc1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
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
* match.c (gfc_match_st_function): When matching a statement function,
need to check if the statement function name shadows the function
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 9c8ae13e0ef..fb6173dcde3 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8eecb3b96a4..0eb47a644b2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,12 @@
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
* fortran.dg/pr78739.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr71649.f90 b/gcc/testsuite/gfortran.dg/pr71649.f90
index f20b7687e6f..c01389acfcf 100644
--- a/gcc/testsuite/gfortran.dg/pr71649.f90
+++ b/gcc/testsuite/gfortran.dg/pr71649.f90
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/use_15.f90 b/gcc/testsuite/gfortran.dg/use_15.f90
index bd5920aa033..eb5aa87cc8b 100644
--- a/gcc/testsuite/gfortran.dg/use_15.f90
+++ b/gcc/testsuite/gfortran.dg/use_15.f90
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/use_rename_8.f90 b/gcc/testsuite/gfortran.dg/use_rename_8.f90
index ad3ab3977c5..b8b49d7a052 100644
--- a/gcc/testsuite/gfortran.dg/use_rename_8.f90
+++ b/gcc/testsuite/gfortran.dg/use_rename_8.f90
@@ -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