[Bug fortran/50919] New: [OOP] Don't use vtable for NON_OVERRIDABLE TBP
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Oct 30 10:09:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50919
Bug #: 50919
Summary: [OOP] Don't use vtable for NON_OVERRIDABLE TBP
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: burnus@gcc.gnu.org
CC: janus@gcc.gnu.org
Current, gfortran uses always a vtable for type-bound procedures. However, a
vtable only makes sense if the type-bound procedure can be overridden (C++: if
it is "virtual").
Expected:
a) gfortran call the procedure directly, which allows for inlining and avoids
the pointer dereference.
b) When the ABI is changed, the procedure is no longer added to the vtable.
Hence, it should be added as item to
http://gcc.gnu.org/wiki/LibgfortranAbiCleanup
Test case. The dump shows the following rather than a simple "test ()":
callit (struct __class_m_T & restrict x)
{
x->_vptr->test ();
module m
type t
contains
procedure, nopass, NON_OVERRIDABLE :: test
end type t
contains
subroutine test()
print *, "t's test"
end subroutine test
subroutine callit(x)
class(t) :: x
call x%test()
end subroutine
end module m
tob@archimedes:/dev/shm> less poly.f90.*
tob@archimedes:/dev/shm> cat poly.f90
module m
type t
contains
procedure, nopass, NON_OVERRIDABLE :: test
end type t
contains
subroutine test()
print *, "t's test"
end subroutine test
subroutine callit(x)
class(t) :: x
call x%test()
end subroutine
end module m
More information about the Gcc-bugs
mailing list