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
This commit is contained in:
Paul Thomas 2007-01-17 17:33:35 +00:00
parent 8086b65daa
commit 9dd8004e91
4 changed files with 53 additions and 2 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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.

View File

@ -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" } }