https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109684

--- Comment #15 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to kargl from comment #14)
> (In reply to Paul Thomas from comment #13)
> > (In reply to Steve Kargl from comment #12)
> > > On Mon, Aug 07, 2023 at 10:04:54PM +0000, kargl at gcc dot gnu.org wrote:
> > > > 
> > > > diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
> > > > index 3cd470ddcca..b0bb8bc1471 100644
> > > > --- a/gcc/fortran/resolve.cc
> > > > +++ b/gcc/fortran/resolve.cc
> > > > @@ -17966,7 +17966,9 @@ resolve_types (gfc_namespace *ns)
> > > > 
> > > >    for (n = ns->contained; n; n = n->sibling)
> > > >      {
> > > > -      if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
> > > > +      if (gfc_pure (ns->proc_name)
> > > > +         && !gfc_pure (n->proc_name)
> > > > +         && !n->proc_name->attr.artificial)
> > > >         gfc_error ("Contained procedure %qs at %L of a PURE procedure 
> > > > must "
> > > >                    "also be PURE", n->proc_name->name,
> > > >                    &n->proc_name->declared_at);
> > > > 
> > > > pault, dos the above look correct?
> > > > 
> > > 
> > > This patch passes a regression test with no new regressions
> > > on x86_64-*-*freebsd.
> > 
> > Hi Steve,
> > 
> > That will certainly fix the bug. An alternative crosses my mind, which is to
> > check the pureness of the final routines as the wrapper is being built and
> > give the wrapper the pure attribute if they are all pure.
> > 
> 
> Just saw that you attached a patch on 5/23/23 that it essentially the same
> as I suggested.  I tried to simply set the final->attr.pure to 1, but this
> ran into issues with the argument list having intent(inout) instead of just
> intent(in).

Having looked at it, I have concluded that the simple fix is the right one for
the time being.

I am wondering about the pureness test itself, however. Surely, the test should
be for impure procedures that are referenced and not just accessible?

Paul

Reply via email to