From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11788 invoked by alias); 15 Dec 2010 08:38:06 -0000 Received: (qmail 11773 invoked by uid 22791); 15 Dec 2010 08:38:06 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 15 Dec 2010 08:38:02 +0000 From: "burnus at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/46952] [OOP] Spurious "recursive call" error with type bound procedure X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Keywords: ice-on-invalid-code, rejects-valid X-Bugzilla-Severity: normal X-Bugzilla-Who: burnus at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Wed, 15 Dec 2010 08:38:00 -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 X-SW-Source: 2010-12/txt/msg01715.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46952 --- Comment #2 from Tobias Burnus 2010-12-15 08:37:42 UTC --- Reduced test case. Crucial seems to be that "inter" and "bar" call "foo" and that foo and bar are defined via the interface "inter". Similarly to gfortran and ifort also Crayftn rejects the following program. However, I do no see any possibility how one could create a recursive call. Thus, I do not see the need for a RECURSIVE attribute ("The RECURSIVE prefix-spec shall appear if any procedure defined by the subprogram directly or indirectly invokes itself or any other procedure defined by the subprogram.") module m type, abstract :: t contains procedure(inter), pass, deferred :: foo procedure(inter), pass, deferred :: bar end type type,extends(t) :: t2 contains procedure, pass :: bar => bar procedure, pass :: foo => foo end type t2 contains subroutine inter(this) class(t) :: this call this%foo() end subroutine inter subroutine foo(this) class(t2) :: this end subroutine foo subroutine bar(this) class(t2) :: this call this%foo() end subroutine end module m