aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2007-01-17 17:33:35 +0000
committerPaul Thomas <pault@gcc.gnu.org>2007-01-17 17:33:35 +0000
commit9dd8004e9108e08d45b25781bc6d44a624f690b8 (patch)
tree645ca4be34c9123444441514fc00fbc40f0f5d07
parent8086b65daacc347fcbb79f4f3e4312b18a3accfe (diff)
downloadgcc-9dd8004e9108e08d45b25781bc6d44a624f690b8.zip
gcc-9dd8004e9108e08d45b25781bc6d44a624f690b8.tar.gz
gcc-9dd8004e9108e08d45b25781bc6d44a624f690b8.tar.bz2
re PR fortran/30476 ([Regression 4.2, 4.3] Via other module imported generic interface rejected)
2007-01-17 Paul Thomas <pault@gcc.gnu.org> PR fortran/30476 * module.c (load_generic_interfaces): Make the marking of the symbol as ambiguous conditional on the module names being different. (write_generic): Ensure that the generic interface has a non-NULL module field. 2007-01-17 Paul Thomas <pault@gcc.gnu.org> PR fortran/30476 * gfortran.dg/generic_12.f90: New test. From-SVN: r120860
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/module.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/generic_12.f9032
4 files changed, 53 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index cba3de8..9dcead3 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2007-01-17 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30476
+ * module.c (load_generic_interfaces): Make the marking of the
+ symbol as ambiguous conditional on the module names being
+ different.
+ (write_generic): Ensure that the generic interface has a
+ non-NULL module field.
+
2007-01-16 Roger Sayle <roger@eyesopen.com>
PR fortran/30404
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 05056a5..1613a74 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3097,9 +3097,11 @@ load_generic_interfaces (void)
gfc_symtree *st;
p = p ? p : name;
st = gfc_find_symtree (gfc_current_ns->sym_root, p);
- st->ambiguous = sym->attr.generic ? 0 : 1;
+ if (!sym->attr.generic
+ && sym->module != NULL
+ && strcmp(module, sym->module) != 0)
+ st->ambiguous = 1;
}
-
if (i == 1)
{
mio_interface_rest (&sym->generic);
@@ -3748,6 +3750,9 @@ write_generic (gfc_symbol * sym)
|| !gfc_check_access (sym->attr.access, sym->ns->default_access))
return;
+ if (sym->module == NULL)
+ sym->module = gfc_get_string (module_name);
+
mio_symbol_interface (&sym->name, &sym->module, &sym->generic);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b8072de..e5724ae 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-01-17 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30476
+ * gfortran.dg/generic_12.f90: New test.
+
2007-01-17 Dorit Nuzman <dorit@il.ibm.com>
* gcc.target/i386/vectorize1.c: Add cleanup-tree-dump.
diff --git a/gcc/testsuite/gfortran.dg/generic_12.f90 b/gcc/testsuite/gfortran.dg/generic_12.f90
new file mode 100644
index 0000000..59c3c96
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/generic_12.f90
@@ -0,0 +1,32 @@
+! { dg-do compile }
+! Test the fix for PR30476 in which the generic interface hello
+! was found incorrectly to be ambiguous.
+!
+!Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+!
+SUBROUTINE hello_x(dum)
+ IMPLICIT NONE
+ INTEGER :: dum
+ WRITE(0,*) "Hello world: ", dum
+END SUBROUTINE hello_x
+
+MODULE interfaces
+IMPLICIT NONE
+INTERFACE hello
+ SUBROUTINE hello_x(dum)
+ IMPLICIT NONE
+ INTEGER :: dum
+ END SUBROUTINE hello_x
+END INTERFACE
+END MODULE interfaces
+
+MODULE global_module
+ USE interfaces
+END MODULE global_module
+
+PROGRAM main
+ USE global_module
+ IMPLICIT NONE
+ CALL hello(10)
+END PROGRAM main
+! { dg-final { cleanup-modules "interfaces global_module" } }