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

--- Comment #8 from Paul Thomas <pault at gcc dot gnu.org> ---
Created attachment 62603
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62603&action=edit
Fix for this PR

The attached patch regtests OK. Some tweaking/checking is still need but this
now runs as expected:

module hyperparameters_m
  implicit none

  type hyperparameters_t(k)
    integer, kind :: k = kind(1.)
    real(k) :: learning_rate_ = real(1.5,k)
  contains
    generic :: operator(==) => default_real_equals
    procedure default_real_equals
  end type

  interface
    logical module function default_real_equals(lhs, rhs)
      implicit none
      class(hyperparameters_t), intent(in) :: lhs, rhs
    end function
  end interface
end module

submodule(hyperparameters_m) hyperparameters_s
contains
    logical module function default_real_equals(lhs, rhs)
      implicit none
      class(hyperparameters_t), intent(in) :: lhs, rhs
      default_real_equals = (lhs%learning_rate_ == rhs%learning_rate_)
    end function
end submodule

  use hyperparameters_m
  type (hyperparameters_t) :: a, b
  print *, a%learning_rate_, default_real_equals(a, b)
  a%learning_rate_ = real(2.5,a%k)
  print *, a%learning_rate_, default_real_equals(a, b)
end

Reply via email to