[Bug fortran/53259] New: [OOP] virtual call to type bound procedure calls base, not extension?
dfranke at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun May 6 19:24:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53259
Bug #: 53259
Summary: [OOP] virtual call to type bound procedure calls base,
not extension?
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: dfranke@gcc.gnu.org
CC: janus@gcc.gnu.org
The testcase below strangely calls a_hook, but I'd expect b_hook to be called?
For what it's worth, an equivalent testcase in C++ calls b_hook ...
$ gfortran hook.f90 && ./a.out
hook: a
[gfortran 4.8 r186145; info provided by Andrew Benson]
See also the thread started here:
http://gcc.gnu.org/ml/fortran/2012-05/msg00029.html
This may be related to PR53255 (but the workaround given there does not seem to
work. Didn't test the patch yet).
Testcase:
$ cat hook.f90
MODULE m
TYPE :: a
CONTAINS
PROCEDURE :: worker => a_worker
PROCEDURE :: hook => a_hook
END TYPE
TYPE, extends(a) :: b
CONTAINS
PROCEDURE :: worker => b_worker
PROCEDURE :: hook => b_hook
END TYPE
CONTAINS
SUBROUTINE a_worker(this)
CLASS(a), INTENT(in) :: this
CALL this%hook()
END SUBROUTINE
SUBROUTINE a_hook(this)
CLASS(a), INTENT(in) :: this
print *, "hook: a" ! This is wrongly(?) called.
END SUBROUTINE
SUBROUTINE b_worker(this)
CLASS(b), INTENT(in) :: this
! do some extra work, then call the worker of the base class,
! expect to come back to b_hook later ...
CALL this%a%worker()
END SUBROUTINE
SUBROUTINE b_hook(this)
CLASS(b), INTENT(in) :: this
print *, "hook: b"
END SUBROUTINE
END MODULE
USE m
TYPE(b) :: obj
CALL obj%worker()
END
More information about the Gcc-bugs
mailing list