public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/50919] New: [OOP] Don't use vtable for NON_OVERRIDABLE TBP
@ 2011-10-30 10:09 burnus at gcc dot gnu.org
  2011-10-31 12:08 ` [Bug fortran/50919] " janus at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2011-10-30 10:09 UTC (permalink / raw)
  To: gcc-bugs

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-11-07 18:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-30 10:09 [Bug fortran/50919] New: [OOP] Don't use vtable for NON_OVERRIDABLE TBP burnus at gcc dot gnu.org
2011-10-31 12:08 ` [Bug fortran/50919] " janus at gcc dot gnu.org
2011-10-31 12:31 ` janus at gcc dot gnu.org
2011-10-31 13:56 ` janus at gcc dot gnu.org
2011-10-31 14:42 ` burnus at gcc dot gnu.org
2011-11-07 18:46 ` janus at gcc dot gnu.org
2011-11-07 19:14 ` janus at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).