https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92178
Bug ID: 92178
Summary: Segmentation fault after passing allocatable array as
intent(out) and its element as value into the same
subroutine
Product: gcc
Version: 9.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: vladimir.fuka at gmail dot com
Target Milestone: ---
This code crashes at the allocated() call with GCC 7,8,9. I am not completely
sure all aliasing rules, but I think it should be fine.
implicit none
integer, allocatable :: a(:)
allocate(a, source=[1])
call assign(a, (a(1)))
print *, allocated(a)
contains
subroutine assign(a, b)
integer, allocatable, intent(out) :: a(:)
integer, value :: b
end subroutine
end program
based on
https://stackoverflow.com/questions/58504284/assignment-of-allocatable-array-with-itself-values/58506248#58506248
> gfortran -fsanitize=address -g -fbacktrace assign.f90
> ./a.out
ASAN:DEADLYSIGNAL
=================================================================
==19756==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc
0x000000401354 bp 0x7ffd1a55b460 sp 0x7ffd1a55b0e0 T0)
==19756==The signal is caused by a READ memory access.
==19756==Hint: address points to the zero page.
#0 0x401353 in MAIN__ /home/lada/f/testy/stackoverflow/assign.f90:9
#1 0x401631 in main /home/lada/f/testy/stackoverflow/assign.f90:9
#2 0x7fb2b52cef89 in __libc_start_main (/lib64/libc.so.6+0x20f89)
#3 0x400c89 in _start (/home/lada/f/testy/stackoverflow/a.out+0x400c89)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/lada/f/testy/stackoverflow/assign.f90:9
in MAIN__
==19756==ABORTING