From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18741 invoked by alias); 6 Jan 2015 10:11:10 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 18711 invoked by uid 48); 6 Jan 2015 10:11:05 -0000 From: "janus at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/64508] New: [F03] interface check missing for procedure pointer component as actual argument Date: Tue, 06 Jan 2015 10:11:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 5.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: janus at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-01/txt/msg00287.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64508 Bug ID: 64508 Summary: [F03] interface check missing for procedure pointer component as actual argument Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: janus at gcc dot gnu.org Inspired by the discussion at: https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.fortran/svfanCGU2vU Example code: module m TYPE :: parent END TYPE parent TYPE, EXTENDS(parent) :: extension INTEGER :: extension_component = 0 procedure(extension_proc), pointer :: ppc END TYPE extension contains SUBROUTINE parent_proc(arg) CLASS(parent), INTENT(IN) :: arg PRINT *, 'I am parent_proc' END SUBROUTINE parent_proc SUBROUTINE extension_proc(arg) CLASS(extension), INTENT(IN) :: arg PRINT *, 'I am extension_proc' PRINT *, arg%extension_component END SUBROUTINE extension_proc SUBROUTINE some_proc(proc) PROCEDURE(parent_proc) :: proc TYPE(Parent) :: a CALL proc(a) END SUBROUTINE some_proc end module program test use m CLASS(extension), ALLOCATABLE :: x procedure(parent_proc), pointer :: ppp procedure(extension_proc), pointer :: ppe CALL some_proc(parent_proc) ! ok CALL some_proc(extension_proc) ! interface mismatch ppp => extension_proc ! interface mismatch call some_proc(ppp) ppe => extension_proc call some_proc(ppe) ! interface mismatch allocate(x, source= Extension(666,extension_proc)) CALL some_proc(x%ppc) ! XXX: mismatch not detected end As the above example shows, interface checking is done for ordinary procedures and procedure pointers as actual arguments to dummy procedures. However, it is missing for procedure-pointer components.