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

--- Comment #2 from Paul Thomas <pault at gcc dot gnu.org> ---
Created attachment 62087
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62087&action=edit
First attempt at a fix - work in progress!

The test below runs correctly with this patch applied. ifx and flang-new accept
it and produce the same result. Nagfor doesn't like the interfaces for some
reason.

The chunk in decl.cc is a proper fix for the PDT part. The zeroed out chunks in
resolve.cc are necessary to prevent errors and will be subject to investigation
one after another.

Paul

module tensor_m
  implicit none

  type tensor_t(k)
    integer, kind :: k
  contains
    procedure default_real_num_components
    procedure double_precision_num_components
    generic :: num_components => default_real_num_components, &
                                 double_precision_num_components
  end type

  interface

    module function default_real_num_components(self) result(res)
      implicit none
      class(tensor_t(kind(0.))) self
      integer :: res
    end function

    module function double_precision_num_components(self) result(res)
      implicit none
      class(tensor_t(kind(0.0_16))) self
      integer :: res
    end function

  end interface

end module 

submodule (tensor_m) tensor_m_components
contains
    module procedure default_real_num_components
      implicit none
      res = 1
    end

    module procedure double_precision_num_components
      implicit none
      res = 2
    end
end

    use tensor_m
    type (tensor_t(kind(0.))) :: a
    type (tensor_t(kind(0.0_16))) :: b
    print *, a%num_components ()
    print *, b%num_components ()
end

Reply via email to