(j3.2006) Question about submodule using its ancestor modue
Bader, Reinhold
Reinhold.Bader
Wed Nov 19 17:21:10 EST 2014
> -----Urspr?ngliche Nachricht-----
> Von: j3-bounces at mailman.j3-fortran.org [mailto:j3-bounces at mailman.j3-
> fortran.org] Im Auftrag von Bill Long
> Gesendet: Mittwoch, 19. November 2014 22:26
> An: fortran standards email list for J3
> Betreff: Re: (j3.2006) Question about submodule using its ancestor modue
>
> I agree with Daniel that USE association is supposed to override HOST
> association.
OK, 16.5.1.4 para 2. I'd gotten too firmly into my mind that submodules
have host access as a matter of principle ...
> However, then consider a modified case:
>
> module m1
> interface
> module subroutine sub(n)
> integer :: n
> end subroutine sub
> end interface
> end module m1
>
> module m2
> use m1
> end module m2
>
> submodule (m1) foo
> use m2
>
> contains
>
> module subroutine sub(n)
> integer :: n
> n = n + 1
> end subroutine sub
>
> end submodule foo
>
>
> and the constraint on the name of a submodule procedure:
>
> C1271 (R1239) The procedure-name shall have been declared to be a separate
> module procedure in the containing
> program unit or an ancestor of that program unit.
>
>
> SUB is declared to be a separate module procedure in module m2, but m2 is not
> an ancestor of submodule foo. All entities in m1 are blocked in foo from host
> association because of the USE of m2. If we're OK with the idea that the
> declaration of the separate module procedure can come from a module that is
> not an ancestor of the submodule containing the implementation, then this code
> is OK. But I don't think that is what C1271 is intended to say.
I agree this second example is non-conforming. The only
way to avoid this situation then seems to be to say
use m2, only :
which would return access by host to sub from foo, and therefore not violate the
constraint any more. Do further problematic examples exist?
>
> Cheers,
> Bill
>
>
>
>
>
>
> On Nov 19, 2014, at 10:03 AM, Daniel C Chen <cdchen at ca.ibm.com> wrote:
>
> > I agree with Reinhold that the code should be conforming. However, I think
> the use association should override the host association. It should have the
> same effect as
> > Program main
> > Use m
> > Contains
> > Subroutine sub()
> > Use m
> > End
> > End :
> >
> > Thanks,
> >
> > Daniel
> >
> > XL Fortran Development - IBM Toronto Software Lab
> > Phone: 905-413-3056
> > Tie: 969-3056
> > Email: cdchen at ca.ibm.com
> > http://www.ibm.com/software/awdtools/fortran/xlfortran
> >
> > <graycol.gif>"Bader, Reinhold" ---11/19/2014 04:03:38---Hello Bill, my take is
> that the code is conforming, and that host association overrides
> >
> > From: "Bader, Reinhold" <Reinhold.Bader at lrz.de>
> > To: fortran standards email list for J3 <j3 at mailman.j3-fortran.org>
> > Date: 11/19/2014 04:03
> > Subject: Re: (j3.2006) Question about submodule using its ancestor
> modue
> > Sent by: j3-bounces at mailman.j3-fortran.org
> >
> >
> >
> > Hello Bill,
> >
> > my take is that the code is conforming, and that host association overrides
> > use association in this context. Because the module must anyway be compiled
> > before the submodule is, there doesn't appear to be a circularity problem.
> > I don't think ambiguities can arise (consider the analogous case
> >
> > m1 uses b
> > m2 uses b
> > a uses m1 and m2
> > ).
> >
> > The case of indirect referencing is actually the interesting use case: Say you
> have
> > an abstract type in m1. This will typically be extended in some other
> > module m2, which needs to use m1. On the other hand, for full dependency
> > inversion, m1 needs to provide e.g. a procedure to create an object. This often
> > will imply that the complete inheritance tree must be dealt with, i.e. the
> procedure
> > specifically needs type information stored in m2. Hence, to avoid circular
> module
> > references, the procedure needs to be put into a submodule, which uses m2,
> and therefore
> > indirectly also m1.
> >
> > Cheers
> > Reinhold
> >
> >
> > > -----Urspr?ngliche Nachricht-----
> > > Von: j3-bounces at mailman.j3-fortran.org [mailto:j3-bounces at mailman.j3-
> > > fortran.org] Im Auftrag von Bill Long
> > > Gesendet: Mittwoch, 19. November 2014 00:06
> > > An: fortran standards email list for J3
> > > Betreff: (j3.2006) Question about submodule using its ancestor modue
> > >
> > >
> > > Is the USE statement in the submodule below conforming?
> > >
> > > module m1
> > > real :: x
> > > end module m1
> > >
> > > submodule (m1) bar
> > > use m1
> > > end submodule bar
> > >
> > > Option 1: It is OK, since the USE of m1 in the submodule blocks all host
> > > association of objects in module m1, so no ambiguity.
> > >
> > > Option 2: No. The submodule is an extension of m1 and this amounts to a
> > > recursive access to the module.
> > >
> > >
> > > I suspect Option 2 would promote better code and fewer mistakes.
> Particularly if
> > > "use m1" were instead "use m2" where m2 included a USE of m1.
> > >
> > >
> > > Cheers,
> > > Bill
> > >
> > >
> > > Bill Long longb at cray.com
> > > Fortran Technical Suport & voice: 651-605-9024
> > > Bioinformatics Software Development fax: 651-605-9142
> > > Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101
> > >
> > >
> > > _______________________________________________
> > > J3 mailing list
> > > J3 at mailman.j3-fortran.org
> > > http://mailman.j3-fortran.org/mailman/listinfo/j3
> > _______________________________________________
> > J3 mailing list
> > J3 at mailman.j3-fortran.org
> > http://mailman.j3-fortran.org/mailman/listinfo/j3
> >
> >
> > _______________________________________________
> > J3 mailing list
> > J3 at mailman.j3-fortran.org
> > http://mailman.j3-fortran.org/mailman/listinfo/j3
>
> Bill Long longb at cray.com
> Fortran Technical Suport & voice: 651-605-9024
> Bioinformatics Software Development fax: 651-605-9142
> Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101
>
>
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3
More information about the J3
mailing list