http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52024
--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-01-28
20:41:28 UTC ---
With the patch in comment #4 I get
[macbook] f90/bug% gfc pr52024.f90
pr52024.f90:46.6:
use m_test
1
Error: 'i_equal_t' and 't_equal_i' for GENERIC '==' at (1) are ambiguous
pr52024.f90:52.10:
print *, t == i
1
Error: Operands of comparison operator '==' at (1) are TYPE(t_test)/INTEGER(4)
pr52024.f90:53.10:
print *, i == t
1
Error: Operands of comparison operator '==' at (1) are INTEGER(4)/TYPE(t_test)
instead of
[macbook] f90/bug% gfcp pr52024.f90
pr52024.f90:10.32:
generic :: operator(==) => t_equal_i, i_equal_t
1
Error: 't_equal_i' and 'i_equal_t' for GENERIC '==' at (1) are ambiguous
pr52024.f90:46.6:
use m_test
1
Fatal Error: Can't open module file 'm_test.mod' for reading at (1): No such
file or directory
without it. However the following test
module m_sort
implicit none
type, abstract :: sort_t
contains
generic :: operator(.gt.) => gt_cmp
procedure :: gt_cmp
end type sort_t
contains
logical function gt_cmp(a,b)
class(sort_t), intent(in) :: a, b
gt_cmp = .true.
end function gt_cmp
end module
module test
use m_sort
implicit none
type, extends(sort_t) :: sort_int_t
integer :: i
contains
generic :: operator(.gt.) => gt_cmp_int
procedure :: gt_cmp_int
end type
contains
logical function gt_cmp_int(a,b) result(cmp)
class(sort_int_t), intent(in) :: a, b
if (a%i > b%i) then
cmp = .true.
else
cmp = .false.
end if
end function gt_cmp_int
end module
(related to pr41951, but I cannot find where I grabbed it) now gives an ICE
[macbook] f90/bug% gfc pr41951_3.f90
f951: internal compiler error: in check_generic_tbp_ambiguity, at
fortran/resolve.c:10965
...
instead of the error
[macbook] f90/bug% gfcp pr41951_3.f90
pr41951_3.f90:21.32:
generic :: operator(.gt.) => gt_cmp_int
1
Error: 'gt_cmp_int' and 'gt_cmp' for GENERIC '.gt.' at (1) are ambiguous
Note that AFAICT the other tests in pr41951 don't ICE.