public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/107742] New: class mismatch in passed procedure
@ 2022-11-18  2:09 jwmwalrus at gmail dot com
  0 siblings, 0 replies; only message in thread
From: jwmwalrus at gmail dot com @ 2022-11-18  2:09 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 107742
           Summary: class mismatch in passed procedure
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jwmwalrus at gmail dot com
  Target Milestone: ---

Hi.

The code below throws the following error:

   51 |         if (this%match(my_proc, 5)) continue
      |                       1
Error: Interface mismatch in dummy procedure ‘proc’ at (1): Type mismatch in
argument 'this' (CLASS(a)/CLASS(b))


----------8<----------
module mod1
    type, abstract :: a
    contains
        procedure(i_match), deferred :: match
    end type

    abstract interface
        subroutine i_proc(this, i)
            import
            class(a), intent(inout) :: this
            integer, intent(in) :: i
        end subroutine
        function i_match(this, proc, i) result(cond)
            import
            logical :: cond
            class(a), intent(inout) :: this
            procedure(i_proc) :: proc
            integer, intent(in) :: i
        end function
    end interface

    type, extends(a) :: b
    contains
        procedure :: match => match_b
        procedure :: exec
    end type

    interface
        module subroutine exec(this)
            class(b), intent(inout) :: this
        end subroutine
    end interface
contains
    function match_b(this, proc, i) result(cond)
        logical :: cond
        class(b), intent(inout) :: this
        procedure(i_proc) :: proc
        integer, intent(in) :: i
        call proc(this, i)
        cond = .true.
    end function
    subroutine my_proc(this, i)
        class(b), intent(inout) :: this
        integer, intent(in) :: i
    end subroutine
end module

submodule (mod1) smod1
contains
    module procedure exec
        if (this%match(my_proc, 5)) continue
    end procedure
end submodule
---------->8----------


Since type b extends type a, doesn't my_proc satisfy the i_proc interface?

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-18  2:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-18  2:09 [Bug fortran/107742] New: class mismatch in passed procedure jwmwalrus at gmail dot com

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).