re PR fortran/89647 (Host associated procedure unable to be used as binding target)
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/89647 resolve.c (resolve_typebound_procedure): Allow host associated procedure to be a binding target. While here, wrap long line. 2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/89647 * gfortran.dg/pr89647.f90: New test. From-SVN: r274393
This commit is contained in:
parent
5fbc8ab48a
commit
eabd9d9167
|
@ -1,3 +1,9 @@
|
|||
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/89647
|
||||
resolve.c (resolve_typebound_procedure): Allow host associated
|
||||
procedure to be a binding target. While here, wrap long line.
|
||||
|
||||
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/87993
|
||||
|
|
|
@ -13583,14 +13583,34 @@ resolve_typebound_procedure (gfc_symtree* stree)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* If proc has not been resolved at this point, proc->name may
|
||||
actually be a USE associated entity. See PR fortran/89647. */
|
||||
if (!proc->resolved
|
||||
&& proc->attr.function == 0 && proc->attr.subroutine == 0)
|
||||
{
|
||||
gfc_symbol *tmp;
|
||||
gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
|
||||
if (tmp && tmp->attr.use_assoc)
|
||||
{
|
||||
proc->module = tmp->module;
|
||||
proc->attr.proc = tmp->attr.proc;
|
||||
proc->attr.function = tmp->attr.function;
|
||||
proc->attr.subroutine = tmp->attr.subroutine;
|
||||
proc->attr.use_assoc = tmp->attr.use_assoc;
|
||||
proc->ts = tmp->ts;
|
||||
proc->result = tmp->result;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for F08:C465. */
|
||||
if ((!proc->attr.subroutine && !proc->attr.function)
|
||||
|| (proc->attr.proc != PROC_MODULE
|
||||
&& proc->attr.if_source != IFSRC_IFBODY)
|
||||
|| proc->attr.abstract)
|
||||
{
|
||||
gfc_error ("%qs must be a module procedure or an external procedure with"
|
||||
" an explicit interface at %L", proc->name, &where);
|
||||
gfc_error ("%qs must be a module procedure or an external "
|
||||
"procedure with an explicit interface at %L",
|
||||
proc->name, &where);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/89647
|
||||
* gfortran.dg/pr89647.f90: New test.
|
||||
|
||||
2019-08-13 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/87993
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
! { dg-do compile }
|
||||
! Code contributed by Ian Harvey <ian_harvey at bigpond dot com>
|
||||
MODULE m1
|
||||
IMPLICIT NONE
|
||||
PUBLIC :: False
|
||||
PUBLIC :: True
|
||||
CONTAINS
|
||||
FUNCTION False() RESULT(b)
|
||||
LOGICAL :: b
|
||||
b = .FALSE.
|
||||
END FUNCTION False
|
||||
|
||||
FUNCTION True() RESULT(b)
|
||||
LOGICAL :: b
|
||||
b = .TRUE.
|
||||
END FUNCTION True
|
||||
END MODULE m1
|
||||
|
||||
MODULE m2
|
||||
USE m1
|
||||
IMPLICIT NONE
|
||||
TYPE, ABSTRACT :: t_parent
|
||||
CONTAINS
|
||||
PROCEDURE(False), DEFERRED, NOPASS :: Binding
|
||||
END TYPE t_parent
|
||||
CONTAINS
|
||||
SUBROUTINE s
|
||||
TYPE, EXTENDS(t_parent) :: t_extension
|
||||
CONTAINS
|
||||
PROCEDURE, NOPASS :: Binding => True
|
||||
END TYPE t_extension
|
||||
END SUBROUTINE s
|
||||
END MODULE m2
|
Loading…
Reference in New Issue