And here is the code embedded as text............ sorry  about sending an
attachment that was purged
------------------------- testfinal.f90 ---------------------
module test_type_mod

  type :: my_test_type
    integer, allocatable :: i
  contains
    final :: delete_test_type
  end type my_test_type

  interface my_test_type
    module procedure  new_test_type_object
  end interface my_test_type

contains

  subroutine delete_test_type(this)
    type(my_test_type) :: this

    write(*,*) 'Called delete_test_type'
    if (allocated(this%i)) deallocate(this%i)

  end subroutine delete_test_type


  function new_test_type_object(item) result(res)
    type(my_test_type)  :: res
    integer, intent(in) :: item
    !Allocation on assignment
    res%i=item
  end function new_test_type_object


end module test_type_mod

module target_mod
  use test_type_mod
  type :: outer_type
    type(my_test_type), allocatable  :: test_item
  end type outer_type

contains

  subroutine new_outer_type(outer,item)
    type(outer_type), intent(out) :: outer
    integer :: item

    allocate(outer%test_item)
    write(*,*) 'Assigning outer%test_item'
    outer%test_item = my_test_type(itemi)
    write(*,*) 'End of new_outer_type'
  end subroutine new_outer_type

end module target_mod

program testfinal
  use target_mod

  implicit none

  integer :: i=10
  type(outer_type), allocatable  :: wrapper

  write(*,*) 'Allocating wrapper '
  allocate(wrapper)
  write(*,*) 'Calling new_outer_type '
  call new_outer_type(wrapper,i)
  write(*,*) 'DeAllocating wrapper '
  deallocate(wrapper)

end program testfinal

On Mon, Jan 24, 2022 at 2:50 PM Salvatore Filippone <
filippone.salvat...@gmail.com> wrote:

> Hi all
> The attached code compiles and runs fine under both GNU and Intel, but it
> produces different results, in particular the FINAL subroutine is invoked
> just once with GNU, three times with Intel.
>
> It seems to me that they cannot both be right; I am not sure what the
> standard is mandating in this case.
> Any ideas?
> Salvatore
> ---------------  Intel
> [pr1eio03@login1: newstuff]$ ifort -v
> ifort version 19.1.1.217
> [pr1eio03@login1: newstuff]$ ifort -o testfinal testfinal.f90
> [pr1eio03@login1: newstuff]$ ./testfinal
>  Allocating wrapper
>  Calling new_outer_type
>  Assigning outer%test_item
>  Called delete_test_type
>  Called delete_test_type
>  End of new_outer_type
>  DeAllocating wrapper
>  Called delete_test_type
> ----------------------------- GNU
> sfilippo@lagrange newstuff]$ gfortran -v
> Using built-in specs.
> COLLECT_GCC=gfortran
> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
> OFFLOAD_TARGET_NAMES=nvptx-none
> OFFLOAD_TARGET_DEFAULT=1
> Target: x86_64-redhat-linux
> Configured with: ../configure --enable-bootstrap
> --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr
> --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=
> http://bugzilla.redhat.com/bugzilla --enable-shared
> --enable-threads=posix --enable-checking=release --enable-multilib
> --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions
> --enable-gnu-unique-object --enable-linker-build-id
> --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin
> --enable-initfini-array
> --with-isl=/builddir/build/BUILD/gcc-11.2.1-20210728/obj-x86_64-redhat-linux/isl-install
> --enable-offload-targets=nvptx-none --without-cuda-driver
> --enable-gnu-indirect-function --enable-cet --with-tune=generic
> --with-arch_32=i686 --build=x86_64-redhat-linux
> Thread model: posix
> Supported LTO compression algorithms: zlib zstd
> gcc version 11.2.1 20210728 (Red Hat 11.2.1-1) (GCC)
> [sfilippo@lagrange newstuff]$ gfortran -o testfinal testfinal.f90
> [sfilippo@lagrange newstuff]$ ./testfinal
>  Allocating wrapper
>  Calling new_outer_type
>  Assigning outer%test_item
>  End of new_outer_type
>  DeAllocating wrapper
>  Called delete_test_type
> ---------------------
>
>

Reply via email to