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

--- Comment #6 from anlauf at gcc dot gnu.org ---
There seems to be something fishy with default initialization of function
results of derived types.  Looking at the attached code, I guessed the
following potential reproducer:

program p
  implicit none
  type multi
     real, allocatable :: mp(:)
  end type
  type fm
     type(multi) :: mfm
  end type
  type(fm), allocatable :: a(:,:)
  integer :: n = 1
  allocate (a(n,n))
  a = mm (a, a)
  a = mm (a, a) ! crashes here with -fsanitize=address
contains
  function mm (ma, mb)
    type(fm) :: ma(:,:), mb(:,:)
    type(fm), dimension(size(ma,dim=1),size(mb,dim=2)) :: mm
    integer :: i, j
    do i = 1, size(ma,dim=1)
       do j = 1, size(mb,dim=2)
          print *, i, j, allocated (mm(i,j)% mfm% mp)
       end do
    end do
  end function mm
end program p

Compiling and running the program prints:

           1           1 F
           1           1 T

The second output line should really be identical to the first one, which is
confirmed by other compilers.

Under Linux, setting MALLOC_PERTURB_=1 I get:

           1           1 T
           1           1 T

Adding -fsanitize=address to the command line, I get a traceback pointing
to the line commented above:

           1           1 T
           1           1 T

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x14c71f85649f in ???
#1  0x14c720845c36 in
_ZN11__sanitizer30atomic_compare_exchange_strongINS_14atomic_uint8_tEEEbPVT_PNS2_4TypeES5_NS_12memory_orderE
        at
../../../../gcc-trunk/libsanitizer/sanitizer_common/sanitizer_atomic_clang.h:80
#2  0x14c720845c36 in
_ZN6__asan9Allocator38AtomicallySetQuarantineFlagIfAllocatedEPNS_9AsanChunkEPvPN11__sanitizer18BufferedStackTraceE
        at ../../../../gcc-trunk/libsanitizer/asan/asan_allocator.cpp:621
#3  0x14c720845c36 in
_ZN6__asan9Allocator10DeallocateEPvmmPN11__sanitizer18BufferedStackTraceENS_9AllocTypeE
        at ../../../../gcc-trunk/libsanitizer/asan/asan_allocator.cpp:697
#4  0x14c720845c36 in
_ZN6__asan9asan_freeEPvPN11__sanitizer18BufferedStackTraceENS_9AllocTypeE
        at ../../../../gcc-trunk/libsanitizer/asan/asan_allocator.cpp:971
#5  0x14c7208cac07 in __interceptor_free
        at ../../../../gcc-trunk/libsanitizer/asan/asan_malloc_linux.cpp:128
#6  0x401f10 in p
        at /home/anlauf/Downloads/pr100440-red.f90:13
#7  0x402180 in main
        at /home/anlauf/Downloads/pr100440-red.f90:13

Reply via email to