OSDN Git Service

2008-09-01 Daniel Kraft <d@domob.eu>
authordomob <domob@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Sep 2008 13:43:10 +0000 (13:43 +0000)
committerdomob <domob@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Sep 2008 13:43:10 +0000 (13:43 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139866 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/use_rename_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/use_rename_5.f90 [new file with mode: 0644]

index 92a0d35..516a974 100644 (file)
@@ -1,5 +1,10 @@
 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.
index c927803..907002b 100644 (file)
@@ -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;
 
index 07830c8..44b789a 100644 (file)
@@ -1,3 +1,9 @@
+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
diff --git a/gcc/testsuite/gfortran.dg/use_rename_4.f90 b/gcc/testsuite/gfortran.dg/use_rename_4.f90
new file mode 100644 (file)
index 0000000..e0e83b8
--- /dev/null
@@ -0,0 +1,22 @@
+! { 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
diff --git a/gcc/testsuite/gfortran.dg/use_rename_5.f90 b/gcc/testsuite/gfortran.dg/use_rename_5.f90
new file mode 100644 (file)
index 0000000..3d7839a
--- /dev/null
@@ -0,0 +1,17 @@
+! { 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