https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109684
--- Comment #14 from kargl at gcc dot gnu.org ---
(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).