2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33542
* interface.c (check_interface1): Specific procedures are
always ambiguous if they have the same name.
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33542
* gfortran.dg/ambiguous_specific_1.f90: New test.
From-SVN: r128954
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/33542
+ * interface.c (check_interface1): Specific procedures are
+ always ambiguous if they have the same name.
+
+2007-10-02 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/33566
* primary.c (gfc_match_rvalue): Make all expressions with array
references to structure parameters into variable expressions.
if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
continue;
- if (compare_interfaces (p->sym, q->sym, generic_flag))
+ if (compare_interfaces (p->sym, q->sym, generic_flag)
+ || p->sym->name == q->sym->name)
{
if (referenced)
{
+2007-10-02 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/33542
+ * gfortran.dg/ambiguous_specific_1.f90: New test.
+
2007-10-02 Revital Eres <eres@il.ibm.com>
* gcc.target/powerpc/paired-8.c: New test.
--- /dev/null
+! { 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 FOO2
+ END INTERFACE
+CONTAINS
+ SUBROUTINE FOO2(I)
+ INTEGER, INTENT(IN) :: I
+ WRITE(*,*) 'INTEGER'
+ END SUBROUTINE FOO2
+END MODULE M1
+
+MODULE M2
+ INTERFACE FOO
+ MODULE PROCEDURE FOO2
+ END INTERFACE
+CONTAINS
+ SUBROUTINE FOO2(R)
+ REAL, INTENT(IN) :: R
+ WRITE(*,*) 'REAL'
+ END SUBROUTINE FOO2
+END MODULE M2
+
+PROGRAM P
+ USE M1 ! { dg-error "Ambiguous interfaces" }
+ USE M2
+ implicit none
+ external bar
+ CALL FOO(10)
+ CALL FOO(10.)
+END PROGRAM P
+! { dg-final { cleanup-modules "m1 m2" } }