diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-08-13 18:35:33 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-08-13 18:35:33 +0000 |
commit | eabd9d9167ce36fe441dee0d5efbca494b303652 (patch) | |
tree | ab2c5b387c5fabd9df61977ee4d703eb2b8914ea /gcc/fortran/resolve.c | |
parent | 5fbc8ab48a57a75e0ce064befc30dee3dc63327a (diff) | |
download | gcc-eabd9d9167ce36fe441dee0d5efbca494b303652.zip gcc-eabd9d9167ce36fe441dee0d5efbca494b303652.tar.gz gcc-eabd9d9167ce36fe441dee0d5efbca494b303652.tar.bz2 |
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
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index d9ad888..bd379b6 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -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; } } |