http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47180
janus at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |NEW
Last reconfirmed| |2011.01.05 14:48:38
Resolution|FIXED |
Summary|[OOP] EXTENDS_TYPE_OF |[OOP] EXTENDS_TYPE_OF
|returns the wrong result if |returns the wrong result
|the polymorphic variable is |for disassociated
|unallocated |polymorphic pointers
Ever Confirmed|0 |1
--- Comment #3 from janus at gcc dot gnu.org 2011-01-05 14:48:38 UTC ---
(In reply to comment #1)
> Note that r168505 is crucial here, which is the fix for PR47024 that I just
> committed a few hours ago, and which fixes this very issue ...
Anyway r168505 only fixed the issue for allocatables, not pointers! Therefore
the following variant indeed still gives the wrong output:
implicit none
type t1
integer :: a
end type t1
type, extends(t1):: t11
integer :: b
end type t11
type(t1), target :: a1
type(t11), target :: a11
class(t1), pointer :: b1
class(t11), pointer :: b11
b1 => NULL()
b11 => NULL()
print *, extends_type_of(b1,a1) ! T - currently, gfortran prints "F"
print *, extends_type_of(b11,a1) ! T - currently, gfortran prints "F"
print *, extends_type_of(b11,a11) ! T - currently, gfortran prints "F"
b1 => a1
b11 => a11
print *, extends_type_of(b1,a1) ! T
print *, extends_type_of(b11,a1) ! T
print *, extends_type_of(b11,a11) ! T
end