http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38894
--- Comment #7 from janus at gcc dot gnu.org 2012-04-25 17:57:11 UTC ---
(In reply to comment #6)
> Here is a maximally reduced test case, which yields the same error as
> iso_c_binding_rename_1.f90 (if the code from comment #2 is removed):
Another variant:
program p
use iso_c_binding, only: c_ptr, c_associated, &
my_cptr_1 => c_ptr, my_cptr_2 => c_ptr
implicit none
type(c_ptr) :: my_ptr
type(my_cptr_1) :: my_ptr_1
type(my_cptr_2) :: my_ptr_2
print *, c_associated (my_ptr) ! passed TYPE(c_ptr) to TYPE(my_cptr_2)
print *, c_associated (my_ptr_1) ! passed TYPE(my_cptr_1) to TYPE(my_cptr_2)
print *, c_associated (my_ptr_2) ! works
end
The problem is apparently that the type of c_associated's argument is being
renamed to 'my_cptr_2'. I also constructed an analogous test case with a
derived type instead of c_ptr, which works correctly:
module m
type :: t
end type
contains
logical function test(x)
type(t) :: x
end function
end module
program p
use m, only: t, test, t1 => t, t2 => t
implicit none
type(t) :: y
type(t1) :: y1
type(t2) :: y2
print *, test (y) ! works
print *, test (y1) ! works
print *, test (y2) ! works
end
This means the problem is special to ISO_C_BINDING.