https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81447

Paul Thomas <pault at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |pault at gcc dot gnu.org

--- Comment #2 from Paul Thomas <pault at gcc dot gnu.org> ---
Bother!

I had better take this one, although it will be some weeks before I can turn to
it because my workstation has died and is subject to a warranty claim.

I can see what the problem is from this workaround:

Module m
  Type :: t
  End Type
  class (t), pointer :: ptr
End Module

The module class object forces a production of a vtable in the module
namespace. r241403 introduced the use of the address of the vtable as a unique
distinguishing feature of the dynamic type. In your testcase, Mat, the
subroutine 's' is forced to generate a separate vtable. Note that vtables are
not excluded by the use list.

The fix is obvious - create a vtable for all module derived type declarations
even when there is no OOP in the module.

Thanks for the report.

Paul

Reply via email to