From 90da2477177993f3e6ff5a8794ea7d31ef9351ae Mon Sep 17 00:00:00 2001 From: burnus Date: Thu, 8 Mar 2007 12:30:58 +0000 Subject: [PATCH 1/1] 2007-03-08 Tobias Burnus PR fortran/30973 * module.c (read_module): Always import module name as symbol. (gfc_match_use): Disallow module name in the only clause of a use statement. 2007-03-08 Tobias Burnus PR fortran/30973 * gfortran.dg/use_4.f90: New test. * gfortran.dg/used_dummy_types_7.f90: Correct ambiguous symbol. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122696 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 19 +++++++++----- gcc/fortran/module.c | 11 ++++++++ gcc/testsuite/ChangeLog | 14 +++++++--- gcc/testsuite/gfortran.dg/use_4.f90 | 33 ++++++++++++++++++++++++ gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 | 4 +-- 5 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/use_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 987bc50d539..3580963bdef 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,9 +1,16 @@ -2007-03-08 Paul Thomas - - PR fortran/31011 - * expr.c (find_array_section): Correct arithmetic for section - size. - +2007-07-08 Tobias Burnus + + PR fortran/30973 + * module.c (read_module): Always import module name as symbol. + (gfc_match_use): Disallow module name in the only clause of + a use statement. + +2007-03-08 Paul Thomas + + PR fortran/31011 + * expr.c (find_array_section): Correct arithmetic for section + size. + 2007-03-07 Brooks Moses * iresolve.c (gfc_resolve_ishftc): Correct s_kind value. diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index efb27e33fd3..fcae6bd7d3f 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -619,6 +619,14 @@ gfc_match_use (void) goto cleanup; } + if (strcmp (new->use_name, module_name) == 0 + || strcmp (new->local_name, module_name) == 0) + { + gfc_error ("The name '%s' at %C has already been used as " + "an external module name.", module_name); + goto cleanup; + } + break; case INTERFACE_USER_OP: @@ -3438,6 +3446,9 @@ read_module (void) /* Get the jth local name for this symbol. */ p = find_use_name_n (name, &j); + if (p == NULL && strcmp (name, module_name) == 0) + p = name; + /* Skip symtree nodes not in an ONLY clause, unless there is an existing symtree loaded from another USE statement. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6267c8ad8fd..dbc2c1fe91b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,13 @@ -2007-03-08 Paul Thomas - - PR fortran/31011 - * gfortran.dg/parameter_array_section_2.f90: New test. +2007-03-08 Tobias Burnus + + PR fortran/30973 + * gfortran.dg/use_4.f90: New test. + * gfortran.dg/used_dummy_types_7.f90: Correct ambiguous symbol. + +2007-03-08 Paul Thomas + + PR fortran/31011 + * gfortran.dg/parameter_array_section_2.f90: New test. 2007-03-08 Volker Reichelt diff --git a/gcc/testsuite/gfortran.dg/use_4.f90 b/gcc/testsuite/gfortran.dg/use_4.f90 new file mode 100644 index 00000000000..43d94bc223c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_4.f90 @@ -0,0 +1,33 @@ +! { dg-do "compile" } +! PR fortran/30973 +! Using symbols with the name of the module + +module foo + integer :: i +end module foo + +module bar + integer :: j +end module bar + +module test + use foo, only: + integer :: foo ! { dg-error "cannot have a type" } +end module test + +module test2 + use bar, only: foo => j + use foo ! ok, unless foo is accessed +end module test2 + +module test3 + use bar, only: foo => j + use foo ! ok, unless foo is accessed + foo = 5 ! { dg-error "is an ambiguous reference to 'j'" } +end module test3 + +program test_foo + use foo, only: foo ! { dg-error "been used as an external module name" } + use foo, only: i => foo! { dg-error "been used as an external module name" } + use foo, only: foo => i! { dg-error "been used as an external module name" } +end program diff --git a/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 index 9e591b23ea3..b0acc51409f 100644 --- a/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 +++ b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 @@ -33,12 +33,12 @@ END MODULE MODULE list INTERFACE - SUBROUTINE dummy_atom_list_insert(this, atom) + SUBROUTINE dummy_atom_list_insert(this, atom2) USE types, ONLY: dummy_atom_list USE atom, ONLY: dummy_atom TYPE(dummy_atom_list), INTENT(inout) :: this - TYPE(dummy_atom), INTENT(in) :: atom + TYPE(dummy_atom), INTENT(in) :: atom2 END SUBROUTINE END INTERFACE END MODULE -- 2.11.0