Commit 3e1e5626 by Daniel Kraft Committed by Daniel Kraft

re PR fortran/37193 ("USE mod, ONLY: i, i=>j" does not import "i")

2008-09-01  Daniel Kraft  <d@domob.eu>

	PR fortran/37193
	* module.c (read_module): Initialize use_only flag on used symbols.

2008-09-01  Daniel Kraft  <d@domob.eu>

	PR fortran/37193
	* gfortran.dg/use_rename_4.f90: New test.
	* gfortran.dg/use_rename_5.f90: New test.

From-SVN: r139866
parent 51c69ddb
2008-09-01 Daniel Kraft <d@domob.eu>
PR fortran/37193
* module.c (read_module): Initialize use_only flag on used symbols.
2008-09-01 Daniel Kraft <d@domob.eu>
* gfc-internals.texi (F2003 OOP), (Type-bound Procedures): New chapter
and section to document the internals of type-bound procedures.
(gfc_expr): Document EXPR_COMPCALL.
......
......@@ -4094,9 +4094,9 @@ read_module (void)
st = gfc_find_symtree (gfc_current_ns->sym_root, name);
/* Delete the symtree if the symbol has been added by a USE
statement without an ONLY(11.3.2). Remember that the rsym
statement without an ONLY(11.3.2). Remember that the rsym
will be the same as the symbol found in the symtree, for
this case.*/
this case. */
if (st && (only_flag || info->u.rsym.renamed)
&& !st->n.sym->attr.use_only
&& !st->n.sym->attr.use_rename
......@@ -4132,6 +4132,11 @@ read_module (void)
if (strcmp (name, p) != 0)
sym->attr.use_rename = 1;
/* We need to set the only_flag here so that symbols from the
same USE...ONLY but earlier are not deleted from the tree in
the gfc_delete_symtree above. */
sym->attr.use_only = only_flag;
/* Store the symtree pointing to this symbol. */
info->u.rsym.symtree = st;
......
2008-09-01 Daniel Kraft <d@domob.eu>
PR fortran/37193
* gfortran.dg/use_rename_4.f90: New test.
* gfortran.dg/use_rename_5.f90: New test.
2008-09-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/37305
......
! { dg-do run }
! PR fortran/37193
! Check fix for problem with re-using the same symbol both renamed and
! plain.
MODULE m
IMPLICIT NONE
INTEGER :: i
END MODULE m
PROGRAM main
USE m, ONLY: i, j => i
IMPLICIT NONE
i = 4
j = 5
IF (i /= j) THEN
CALL abort ()
END IF
END PROGRAM main
! { dg-do compile }
! PR fortran/37193
! Check that renamed symbols are not accessiable uner their target name.
MODULE m
IMPLICIT NONE
INTEGER :: i
END MODULE m
PROGRAM main
USE m, ONLY: j => i
IMPLICIT NONE
i = 4 ! { dg-error "no IMPLICIT type" }
j = 5
END PROGRAM main
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment