[J3] [EXTERNAL] Re: Self-assignment of allocatable component

Clune, Thomas L. (GSFC-6101) thomas.l.clune at nasa.gov
Thu Jul 29 12:27:29 UTC 2021


Ah,  but by the same measure, are Fortran’s pointers “less expensive” than C pointers?     Maybe allowing for a normalization factor based on the relative size of the 2 communities.

From: J3 <j3-bounces at mailman.j3-fortran.org> on behalf of j3 <j3 at mailman.j3-fortran.org>
Reply-To: j3 <j3 at mailman.j3-fortran.org>
Date: Wednesday, July 28, 2021 at 11:44 PM
To: j3 <j3 at mailman.j3-fortran.org>
Cc: Damian Rouson <damian at sourceryinstitute.org>
Subject: [EXTERNAL] Re: [J3] Self-assignment of allocatable component

As one measure of the cost and complexity associated with a feature, someday I would love to see a count or a percentage of the of the emails on this list in response to a question roughly equal to “Is this code standard-conforming?” for code that involves a pointer.  By the suggested measure, I nominate pointers for the single most expensive feature in the history of Fortran.

Damian

Sent from my iPhone


On Jul 28, 2021, at 06:55, Vipul Parekh via J3 <j3 at mailman.j3-fortran.org> wrote:

On Wed, Jul 28, 2021 at 9:01 AM Daniel C Chen via J3 <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>> wrote:

Thanks Malcolm and all for the clarification.
..

From: "Malcolm Cohen via J3" <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>>
To: "'General J3 interest list'" <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>>..
Hi Daniel,

Yes, you are quite right, so in that case, X=X would involve at least
1.      Capturing the value of X%I,
2.      Finalising X%I,
3.      Restoring the value of X%I. ..

 Hi Daniel and Malcolm,

Interesting discussion.  If I understood the clarification thus far correctly, the following program seems to me to conform - would you agree?

 module m
   type :: t
      character(len=10) :: objname = ""
      integer :: dat = 0
   contains
      final :: finalize_t
   end type
   type, extends(t) :: u
   end type
contains
   impure elemental subroutine finalize_t( this )
      type(t), intent(inout) :: this
      print *, "t::finalize_t invoked for ", this%objname
   end subroutine
end module
module n
   use m
   type :: v
      class(t), allocatable :: i
   end type
contains
   subroutine sub()
      type(v) :: x, y
      allocate( t :: x%i ) ; x%i%objname = "x%i" ; x%i%dat = 42
      allocate( u :: y%i ) ; y%i%objname = "y%i"
      if ( allocated(y%i) ) then
         print *, "Initially, y%i%dat = ", y%i%dat, "; expected is 0"
      end if
      y = x ; y%i%objname = "y%i"
      if ( allocated(y%i) ) then
         print *, "y%i%dat = ", y%i%dat, "; expected is 42"
      end if
   end subroutine
end module
   use n
   call sub()
end

And the program output per the standard might be as follows - note the order of the last 2 lines in the output can be ignored:
 Initially, y%i%dat =            0 ; expected is 0
 t::finalize_t invoked for y%i
 y%i%dat =           42 ; expected is 42
 t::finalize_t invoked for y%i
 t::finalize_t invoked for x%i

However only one out of several processors I tried gave the above output.  There is variance among the rest when it comes to output from the (impure) finalizer.  Is the expected output I list above conformant, or is that the other processors are yet to conform to the standard when it comes to finalization?

Daniel, is it possible for you to check the IBM processor with this example and provide your feedback and comments?

Thanks,
Vipul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20210729/641a254f/attachment.htm>


More information about the J3 mailing list