re PR fortran/33542 (gfortran does not detect ambigious specific names if they are the same as generic names)
2007-10-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/33542 * resolve.c (resolve_actual_arglist): If the actual argument is ambiguous, then there is an error. 2007-10-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/33542 * gfortran.dg/ambiguous_specific_1.f90: New test. From-SVN: r129268
This commit is contained in:
parent
98a36c7ca0
commit
27372c38aa
|
@ -1,3 +1,9 @@
|
||||||
|
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/33542
|
||||||
|
* resolve.c (resolve_actual_arglist): If the actual argument is
|
||||||
|
ambiguous, then there is an error.
|
||||||
|
|
||||||
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/33664
|
PR fortran/33664
|
||||||
|
|
|
@ -971,6 +971,13 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (e->expr_type == FL_VARIABLE && e->symtree->ambiguous)
|
||||||
|
{
|
||||||
|
gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name,
|
||||||
|
&e->where);
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
if (e->ts.type != BT_PROCEDURE)
|
if (e->ts.type != BT_PROCEDURE)
|
||||||
{
|
{
|
||||||
if (gfc_resolve_expr (e) != SUCCESS)
|
if (gfc_resolve_expr (e) != SUCCESS)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/33542
|
||||||
|
* gfortran.dg/ambiguous_specific_1.f90: New test.
|
||||||
|
|
||||||
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
2007-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/33664
|
PR fortran/33664
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
! Checks the fix for PR33542, in which the ambiguity in the specific
|
||||||
|
! interfaces of foo was missed.
|
||||||
|
!
|
||||||
|
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
|
||||||
|
!
|
||||||
|
MODULE M1
|
||||||
|
INTERFACE FOO
|
||||||
|
MODULE PROCEDURE FOO
|
||||||
|
END INTERFACE
|
||||||
|
CONTAINS
|
||||||
|
SUBROUTINE FOO(I)
|
||||||
|
INTEGER, INTENT(IN) :: I
|
||||||
|
WRITE(*,*) 'INTEGER'
|
||||||
|
END SUBROUTINE FOO
|
||||||
|
END MODULE M1
|
||||||
|
|
||||||
|
MODULE M2
|
||||||
|
INTERFACE FOO
|
||||||
|
MODULE PROCEDURE FOO
|
||||||
|
END INTERFACE
|
||||||
|
CONTAINS
|
||||||
|
SUBROUTINE FOO(R)
|
||||||
|
REAL, INTENT(IN) :: R
|
||||||
|
WRITE(*,*) 'REAL'
|
||||||
|
END SUBROUTINE FOO
|
||||||
|
END MODULE M2
|
||||||
|
|
||||||
|
PROGRAM P
|
||||||
|
USE M1
|
||||||
|
USE M2
|
||||||
|
implicit none
|
||||||
|
external bar
|
||||||
|
CALL FOO(10)
|
||||||
|
CALL FOO(10.)
|
||||||
|
call bar (foo) ! { dg-error "is ambiguous" }
|
||||||
|
END PROGRAM P
|
||||||
|
! { dg-final { cleanup-modules "m1 m2" } }
|
Loading…
Reference in New Issue