Bug#700301: gfortran: Fails to assign slice to allocatable array of derived type
Package: gfortran
Version: 4:4.7.2-1
Severity: normal
Dear Maintainer,
The code below leads to segmentaion fault:
program allocatables
implicit none
integer, parameter :: CH_ = 4
type with_character
character(kind=CH_) :: Post = CH__" "
integer :: i = 0
end type
type with_string
character(4, kind=CH_) :: Post = CH__" "
integer :: i = 0
end type
type(with_character) :: CharList(10)
type(with_string) :: StringList(10)
type(with_character), allocatable :: CharAlloc(:)
type(with_string), allocatable :: StringAlloc(:)
CharAlloc%Post = CharList%Post
CharAlloc = Pack(CharAlloc(2:), .true.) ! First segmentation fault.
StringAlloc%Post = StringList%Post
StringAlloc = Pack(StringList(2:), .true.) ! Second segmentation fault of another type.
end program allocatables
=========================
First segmentation fault:
malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *)
&((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct
malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)
>= (unsigned long)((((__builtin_offsetof (struct malloc_chunk,
>fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t)))
>- 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end &
>pagemask) == 0)' failed.
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
==========================
Second segmentation fault:
*** glibc detected *** ./lab_1_3.exe: free(): invalid next size
(normal): 0x00000000022690d0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x2b7871151d76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x2b7871156aac]
../lab_1_3.exe[0x400fa7]
../lab_1_3.exe[0x400ff3]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x2b78710f9ead]
../lab_1_3.exe[0x400969]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:02 1843005
/home/stanislav/tmp/lab_1_3/bin/lab_1_3.exe
00601000-00602000 rw-p 00001000 08:02 1843005
/home/stanislav/tmp/lab_1_3/bin/lab_1_3.exe
02266000-02287000 rw-p 00000000 00:00 0
[heap]
2b78704d5000-2b78704f5000 r-xp 00000000 08:01 1450064
/lib/x86_64-linux-gnu/ld-2.13.so
2b78704f5000-2b78704f7000 rw-p 00000000 00:00 0
2b78706f4000-2b78706f5000 r--p 0001f000 08:01 1450064
/lib/x86_64-linux-gnu/ld-2.13.so
2b78706f5000-2b78706f6000 rw-p 00020000 08:01 1450064
/lib/x86_64-linux-gnu/ld-2.13.so
2b78706f6000-2b78706f7000 rw-p 00000000 00:00 0
2b78706f7000-2b787080b000 r-xp 00000000 08:01 1308169
/usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
2b787080b000-2b7870a0b000 ---p 00114000 08:01 1308169
/usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
2b7870a0b000-2b7870a0d000 rw-p 00114000 08:01 1308169
/usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
2b7870a0d000-2b7870a8e000 r-xp 00000000 08:01 1450058
/lib/x86_64-linux-gnu/libm-2.13.so
2b7870a8e000-2b7870c8d000 ---p 00081000 08:01 1450058
/lib/x86_64-linux-gnu/libm-2.13.so
2b7870c8d000-2b7870c8e000 r--p 00080000 08:01 1450058
/lib/x86_64-linux-gnu/libm-2.13.so
2b7870c8e000-2b7870c8f000 rw-p 00081000 08:01 1450058
/lib/x86_64-linux-gnu/libm-2.13.so
2b7870c8f000-2b7870c90000 rw-p 00000000 00:00 0
2b7870c90000-2b7870ca5000 r-xp 00000000 08:01 1439008
/lib/x86_64-linux-gnu/libgcc_s.so.1
2b7870ca5000-2b7870ea5000 ---p 00015000 08:01 1439008
/lib/x86_64-linux-gnu/libgcc_s.so.1
2b7870ea5000-2b7870ea6000 rw-p 00015000 08:01 1439008
/lib/x86_64-linux-gnu/libgcc_s.so.1
2b7870ea6000-2b7870edb000 r-xp 00000000 08:01 1311727
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
2b7870edb000-2b78710da000 ---p 00035000 08:01 1311727
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
2b78710da000-2b78710db000 rw-p 00034000 08:01 1311727
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
2b78710db000-2b787125b000 r-xp 00000000 08:01 1450061
/lib/x86_64-linux-gnu/libc-2.13.so
2b787125b000-2b787145b000 ---p 00180000 08:01 1450061
/lib/x86_64-linux-gnu/libc-2.13.so
2b787145b000-2b787145f000 r--p 00180000 08:01 1450061
/lib/x86_64-linux-gnu/libc-2.13.so
2b787145f000-2b7871460000 rw-p 00184000 08:01 1450061
/lib/x86_64-linux-gnu/libc-2.13.so
2b7871460000-2b7871467000 rw-p 00000000 00:00 0
2b7874000000-2b7874021000 rw-p 00000000 00:00 0
2b7874021000-2b7878000000 ---p 00000000 00:00 0
7fffa2f9d000-7fffa2fbe000 rw-p 00000000 00:00 0
[stack]
7fffa2fff000-7fffa3000000 r-xp 00000000 00:00 0
[vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
[vsyscall]
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
================================
First error doesn't apears if CH_ = 1 in code.
-- System Information:
Debian Release: 6.0.6
APT prefers stable
APT policy: (990, 'stable'), (500, 'stable-updates'), (500, 'proposed-updates'), (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages gfortran depends on:
ii cpp 4:4.7.2-1
ii gcc 4:4.7.2-1
ii gfortran-4.7 4.7.2-5
gfortran recommends no packages.
Versions of packages gfortran suggests:
ii gfortran-doc 5:4
pn gfortran-multilib <none>
-- no debconf information
Reply to: