re PR fortran/32634 (renamed, use associated generic interface rejected)
authorPaul Thomas <pault@gcc.gnu.org>
Thu, 12 Jul 2007 20:04:59 +0000 (20:04 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Thu, 12 Jul 2007 20:04:59 +0000 (20:04 +0000)
2007-07-12  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/32634
PR fortran/32727
* module.c (write_generic): Restore patch of 2007-07-10 and use
symbol name if there are no use names.

2007-07-12  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/32727
* gfortran.dg/interface_17.f90: New test.

From-SVN: r126600

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

index 151b7d979f3759485ac1f7549d5c36fd5036fc13..79f646df95596ef81b19ae04200c3b22fafe967a 100644 (file)
@@ -1,3 +1,10 @@
+2007-07-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/32634
+       PR fortran/32727
+       * module.c (write_generic): Restore patch of 2007-07-10 and use
+       symbol name if there are no use names. 
+
 2007-07-12  Christopher D. Rickett  <crickett@lanl.gov>
 
        PR fortran/32599
index 288f1f92a354f3d71540e96a814e7a7de16ff3c0..31b7c9bbf3ffbd40cf7e29b050887d27284d29fd 100644 (file)
@@ -3947,6 +3947,9 @@ write_operator (gfc_user_op *uop)
 static void
 write_generic (gfc_symbol *sym)
 {
+  const char *p;
+  int nuse, j;
+
   if (sym->generic == NULL
       || !gfc_check_access (sym->attr.access, sym->ns->default_access))
     return;
@@ -3954,7 +3957,21 @@ write_generic (gfc_symbol *sym)
   if (sym->module == NULL)
     sym->module = gfc_get_string (module_name);
 
-  mio_symbol_interface (&sym->name, &sym->module, &sym->generic);
+  /* See how many use names there are.  If none, use the symbol name.  */
+  nuse = number_use_names (sym->name);
+  if (nuse == 0)
+    {
+      mio_symbol_interface (&sym->name, &sym->module, &sym->generic);
+      return;
+    }
+
+  for (j = 1; j <= nuse; j++)
+    {
+      /* Get the jth local name for this symbol.  */
+      p = find_use_name_n (sym->name, &j);
+
+      mio_symbol_interface (&p, &sym->module, &sym->generic);
+    }
 }
 
 
index fc12113870e9d85abe3a607875cf5b43375ccedc..a4f28b5e94fbbeb8e26242affff2ce018e0e50b7 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/32727
+       * gfortran.dg/interface_17.f90: New test.
+
 2007-07-12  Christopher D. Rickett  <crickett@lanl.gov>
 
        PR fortran/32599
diff --git a/gcc/testsuite/gfortran.dg/interface_17.f90 b/gcc/testsuite/gfortran.dg/interface_17.f90
new file mode 100644 (file)
index 0000000..44b8a46
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do compile }
+! Tests the fix for PR32727, which was a regression caused
+! by the fix for PR32634
+!
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
+!
+MODULE kinds
+  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND ( 14, 200 )
+END MODULE kinds
+
+MODULE util
+  USE kinds,                           ONLY: dp
+  INTERFACE sort
+     MODULE PROCEDURE sort2
+  END INTERFACE
+CONTAINS
+  SUBROUTINE sort2 ( )
+  END SUBROUTINE sort2
+END MODULE util
+
+MODULE graphcon
+  USE util,                            ONLY: sort
+END MODULE graphcon
+! { dg-final { cleanup-modules "kinds util graphcon" } }