re PR fortran/46952 ([OOP] Spurious "recursive call" error with type bound procedure)
2013-02-12 Janus Weil <janus@gcc.gnu.org> PR fortran/46952 * resolve.c (resolve_call): Do not check deferred procedures for recursiveness. 2013-02-12 Janus Weil <janus@gcc.gnu.org> PR fortran/46952 * gfortran.dg/typebound_deferred_1.f90: New. From-SVN: r195975
This commit is contained in:
parent
fdec36abf9
commit
fdb1fa9ebe
@ -1,3 +1,9 @@
|
||||
2013-02-12 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/46952
|
||||
* resolve.c (resolve_call): Do not check deferred procedures for
|
||||
recursiveness.
|
||||
|
||||
2013-02-09 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/55362
|
||||
|
@ -3785,28 +3785,30 @@ resolve_call (gfc_code *c)
|
||||
}
|
||||
}
|
||||
|
||||
/* If this ia a deferred TBP with an abstract interface
|
||||
(which may of course be referenced), c->expr1 will be set. */
|
||||
if (csym && csym->attr.abstract && !c->expr1)
|
||||
/* If this ia a deferred TBP, c->expr1 will be set. */
|
||||
if (!c->expr1 && csym)
|
||||
{
|
||||
gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L",
|
||||
csym->name, &c->loc);
|
||||
return FAILURE;
|
||||
}
|
||||
if (csym->attr.abstract)
|
||||
{
|
||||
gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L",
|
||||
csym->name, &c->loc);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
/* Subroutines without the RECURSIVE attribution are not allowed to
|
||||
* call themselves. */
|
||||
if (csym && is_illegal_recursion (csym, gfc_current_ns))
|
||||
{
|
||||
if (csym->attr.entry && csym->ns->entries)
|
||||
gfc_error ("ENTRY '%s' at %L cannot be called recursively, as"
|
||||
" subroutine '%s' is not RECURSIVE",
|
||||
csym->name, &c->loc, csym->ns->entries->sym->name);
|
||||
else
|
||||
gfc_error ("SUBROUTINE '%s' at %L cannot be called recursively, as it"
|
||||
" is not RECURSIVE", csym->name, &c->loc);
|
||||
/* Subroutines without the RECURSIVE attribution are not allowed to
|
||||
call themselves. */
|
||||
if (is_illegal_recursion (csym, gfc_current_ns))
|
||||
{
|
||||
if (csym->attr.entry && csym->ns->entries)
|
||||
gfc_error ("ENTRY '%s' at %L cannot be called recursively, "
|
||||
"as subroutine '%s' is not RECURSIVE",
|
||||
csym->name, &c->loc, csym->ns->entries->sym->name);
|
||||
else
|
||||
gfc_error ("SUBROUTINE '%s' at %L cannot be called recursively, "
|
||||
"as it is not RECURSIVE", csym->name, &c->loc);
|
||||
|
||||
t = FAILURE;
|
||||
t = FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Switch off assumed size checking and do this again for certain kinds
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-02-12 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/46952
|
||||
* gfortran.dg/typebound_deferred_1.f90: New.
|
||||
|
||||
2013-02-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/56151
|
||||
|
23
gcc/testsuite/gfortran.dg/typebound_deferred_1.f90
Normal file
23
gcc/testsuite/gfortran.dg/typebound_deferred_1.f90
Normal file
@ -0,0 +1,23 @@
|
||||
! { dg-do compile }
|
||||
!
|
||||
! PR 46952: [OOP] Spurious "recursive call" error with type bound procedure
|
||||
!
|
||||
! Contributed by Ian Harvey <ian_harvey@bigpond.com>
|
||||
|
||||
module m
|
||||
|
||||
type, abstract :: t
|
||||
contains
|
||||
procedure(inter), pass, deferred :: foo
|
||||
end type
|
||||
|
||||
contains
|
||||
|
||||
subroutine inter(this)
|
||||
class(t) :: this
|
||||
call this%foo()
|
||||
end subroutine inter
|
||||
|
||||
end module m
|
||||
|
||||
! { dg-final { cleanup-modules "m" } }
|
Loading…
Reference in New Issue
Block a user