* [Patch][Fortran] Fix name conflict check for use-assoc (PR 92736)
@ 2020-04-08 10:44 Tobias Burnus
2020-04-14 9:13 ` *ping* " Tobias Burnus
0 siblings, 1 reply; 3+ messages in thread
From: Tobias Burnus @ 2020-04-08 10:44 UTC (permalink / raw)
To: gcc-patches, fortran
[-- Attachment #1: Type: text/plain, Size: 726 bytes --]
Hi all,
this issue only occurs when use associating a symbol in a module
and then again use-associating the same symbol in its submodule.
If one simply uses
use m, only: i
use m, only: i
the issue does not occur as all symbols are only created after
parsing all use statements.
And for
use m, only: i
contains
subroutine sub()
use m, only: i
one has different gfc_namespaces such that they cannot conflict.
This is a GCC 9 + mainline/10 regression, hence:
OK for those two branches?
Tobias
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
[-- Attachment #2: mod-rename.diff --]
[-- Type: text/x-patch, Size: 4680 bytes --]
[Fortran] Fix name conflict check for use-assoc (PR 92736)
* module.c (gfc_match_use): Fix name-conflict check for use-associating
the same symbol again in a submodule.
* gfortran.dg/use_rename_10.f90: New.
* gfortran.dg/use_rename_11.f90: New.
gcc/fortran/module.c | 26 +++++-----
gcc/testsuite/gfortran.dg/use_rename_10.f90 | 28 ++++++++++
gcc/testsuite/gfortran.dg/use_rename_11.f90 | 79 +++++++++++++++++++++++++++++
3 files changed, 121 insertions(+), 12 deletions(-)
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 73a3f202834..eccf92bf658 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -648,18 +648,6 @@ 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 && type != INTERFACE_USER_OP)
- {
- 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)
@@ -691,6 +679,20 @@ gfc_match_use (void)
goto cleanup;
}
+ st = gfc_find_symtree (gfc_current_ns->sym_root, name);
+ if (st && type != INTERFACE_USER_OP
+ && (st->n.sym->module != use_list->module_name
+ || strcmp (st->n.sym->name, new_use->use_name) != 0))
+ {
+ 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 (strcmp (new_use->use_name, use_list->module_name) == 0
|| strcmp (new_use->local_name, use_list->module_name) == 0)
{
diff --git a/gcc/testsuite/gfortran.dg/use_rename_10.f90 b/gcc/testsuite/gfortran.dg/use_rename_10.f90
new file mode 100644
index 00000000000..736d319c5a9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_rename_10.f90
@@ -0,0 +1,28 @@
+! { dg-do compile }
+!
+! PR fortran/92736
+!
+! Contributed by Chinoune Mehdi
+!
+module m1
+ implicit none
+ integer, parameter :: i = 10
+end module m1
+
+module m2
+ use m1, only : i
+ implicit none
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end module m2
+
+submodule(m2) s1
+ use m1, only : i
+ implicit none
+contains
+ module subroutine sb1
+ print *,"hello", i
+ end subroutine sb1
+end submodule s1
diff --git a/gcc/testsuite/gfortran.dg/use_rename_11.f90 b/gcc/testsuite/gfortran.dg/use_rename_11.f90
new file mode 100644
index 00000000000..b713ae01d36
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_rename_11.f90
@@ -0,0 +1,79 @@
+! { dg-do compile }
+!
+! PR fortran/92736
+!
+module m
+ integer :: i, j
+end module m
+
+module m2
+ integer :: i, k
+end module m2
+
+module mod
+ use m, only: i
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end
+
+! Error: use 'i' both for m's 'i' and 'j'
+submodule(mod) sub ! { dg-error "Symbol 'i' at .1. conflicts with the rename symbol" }
+ use m1, only: i => j ! { dg-error "Symbol 'i' at .1. conflicts with the rename symbol" }
+end
+
+module mod2
+ use m, only: i
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end
+
+! Error: use 'i' both for m's 'i' and m2's 'k'
+submodule(mod2) sub2 ! { dg-error "Symbol 'i' at .1. conflicts with the rename symbol" }
+ use m2, only: i => k ! { dg-error "Symbol 'i' at .1. conflicts with the rename symbol" }
+end
+
+
+module mod3
+ use m, only: i
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end
+
+! Error: use 'i' both for m's 'i' and m2's 'i'
+submodule(mod3) sub3 ! { dg-error "Symbol 'i' at .1. conflicts with the symbol" }
+ use m2, only: i ! { dg-error "Symbol 'i' at .1. conflicts with the symbol" }
+end
+
+
+module mod4
+ use m, only: mm => i, i
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end
+
+! OK
+submodule(mod4) sub4
+ use m, only: i
+ use m, only: mm => i
+end
+
+module mod5
+ use m, only: mm => i
+ interface
+ module subroutine sb1()
+ end subroutine sb1
+ end interface
+end
+
+! mm from both m2 and m
+submodule(mod5) sub5 ! { dg-error "Symbol 'mm' at .1. conflicts with the rename symbol" }
+ use m2, only: mm => i ! { dg-error "Symbol 'mm' at .1. conflicts with the rename symbol" }
+end
^ permalink raw reply [flat|nested] 3+ messages in thread
* *ping* Re: [Patch][Fortran] Fix name conflict check for use-assoc (PR 92736)
2020-04-08 10:44 [Patch][Fortran] Fix name conflict check for use-assoc (PR 92736) Tobias Burnus
@ 2020-04-14 9:13 ` Tobias Burnus
2020-04-14 11:55 ` Thomas Koenig
0 siblings, 1 reply; 3+ messages in thread
From: Tobias Burnus @ 2020-04-14 9:13 UTC (permalink / raw)
To: gcc-patches, fortran
*ping*
On 4/8/20 12:44 PM, Tobias Burnus wrote:
> Hi all,
>
> this issue only occurs when use associating a symbol in a module
> and then again use-associating the same symbol in its submodule.
>
> If one simply uses
> use m, only: i
> use m, only: i
> the issue does not occur as all symbols are only created after
> parsing all use statements.
>
> And for
> use m, only: i
> contains
> subroutine sub()
> use m, only: i
> one has different gfc_namespaces such that they cannot conflict.
>
> This is a GCC 9 + mainline/10 regression, hence:
> OK for those two branches?
>
> Tobias
>
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: *ping* Re: [Patch][Fortran] Fix name conflict check for use-assoc (PR 92736)
2020-04-14 9:13 ` *ping* " Tobias Burnus
@ 2020-04-14 11:55 ` Thomas Koenig
0 siblings, 0 replies; 3+ messages in thread
From: Thomas Koenig @ 2020-04-14 11:55 UTC (permalink / raw)
To: Tobias Burnus, gcc-patches, fortran
Hi Tobias,
> *ping*
OK. Thanks for the patch!
Regards
Thomas
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-04-14 11:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-08 10:44 [Patch][Fortran] Fix name conflict check for use-assoc (PR 92736) Tobias Burnus
2020-04-14 9:13 ` *ping* " Tobias Burnus
2020-04-14 11:55 ` Thomas Koenig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).