[Bug fortran/83567] New: Parametrized derived types: Segmentation fault when assigning a function return value
berke.durak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Dec 24 02:08:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83567
Bug ID: 83567
Summary: Parametrized derived types: Segmentation fault when
assigning a function return value
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: berke.durak at gmail dot com
Target Milestone: ---
Just wrote a small program to test the new parametrized derived types.
Unfortunately I get runtime memory corruption errors and segmentation faults.
% cat pdf.f90
module pdt_m
implicit none
type :: vec(k)
integer, len :: k=3
integer :: foo(k)=[1,2,3]
end type vec
contains
function addvv(a,b) result(c)
type(vec(k=*)), intent(in) :: a
type(vec(k=*)), intent(in) :: b
type(vec(k=a%k)) :: c
c%foo=a%foo+b%foo
end function
end module pdt_m
program test_pdt
use pdt_m
implicit none
type(vec) :: u,v,w
u%foo=[1,2,3]
v%foo=[2,3,4]
w=addvv(u,v)
print *,w
end program test_pdt
% gfortran-8 --version
GNU Fortran (Debian 8-20171223-1) 8.0.0 20171223 (experimental) [trunk revision
255988]
% gfortran-8 pdt.f90 -o pdt -Wall -O3 -g -fcheck=all -Wextra
% ./pdt
3 0 0 7
*** Error in `./pdt': double free or corruption (fasttop): 0x000055cc59c66630
***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x70bfb)[0x7f303fe40bfb]
/lib/x86_64-linux-gnu/libc.so.6(+0x76fc6)[0x7f303fe46fc6]
/lib/x86_64-linux-gnu/libc.so.6(+0x7780e)[0x7f303fe4780e]
./pdt(+0xdf0)[0x55cc59a0fdf0]
./pdt(+0x89f)[0x55cc59a0f89f]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f303fdf02e1]
./pdt(+0x8da)[0x55cc59a0f8da]
======= Memory map: ========
55cc59a0f000-55cc59a11000 r-xp 00000000 fe:04 1316416
/home/alpha/src/fortran/23_Parametrized_derived_types/pdt
55cc59c10000-55cc59c11000 r--p 00001000 fe:04 1316416
/home/alpha/src/fortran/23_Parametrized_derived_types/pdt
55cc59c11000-55cc59c12000 rw-p 00002000 fe:04 1316416
/home/alpha/src/fortran/23_Parametrized_derived_types/pdt
55cc59c63000-55cc59c84000 rw-p 00000000 00:00 0 [heap]
7f3038000000-7f3038021000 rw-p 00000000 00:00 0
7f3038021000-7f303c000000 ---p 00000000 00:00 0
7f303fbb6000-7f303fbcf000 r-xp 00000000 fe:04 393306
/lib/x86_64-linux-gnu/libz.so.1.2.8
7f303fbcf000-7f303fdce000 ---p 00019000 fe:04 393306
/lib/x86_64-linux-gnu/libz.so.1.2.8
7f303fdce000-7f303fdcf000 r--p 00018000 fe:04 393306
/lib/x86_64-linux-gnu/libz.so.1.2.8
7f303fdcf000-7f303fdd0000 rw-p 00019000 fe:04 393306
/lib/x86_64-linux-gnu/libz.so.1.2.8
7f303fdd0000-7f303ff63000 r-xp 00000000 fe:04 396680
/lib/x86_64-linux-gnu/libc-2.24.so
7f303ff63000-7f3040163000 ---p 00193000 fe:04 396680
/lib/x86_64-linux-gnu/libc-2.24.so
7f3040163000-7f3040167000 r--p 00193000 fe:04 396680
/lib/x86_64-linux-gnu/libc-2.24.so
7f3040167000-7f3040169000 rw-p 00197000 fe:04 396680
/lib/x86_64-linux-gnu/libc-2.24.so
7f3040169000-7f304016d000 rw-p 00000000 00:00 0
7f304016d000-7f30401ab000 r-xp 00000000 fe:04 5512042
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f30401ab000-7f30403ab000 ---p 0003e000 fe:04 5512042
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f30403ab000-7f30403ac000 r--p 0003e000 fe:04 5512042
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f30403ac000-7f30403ad000 rw-p 0003f000 fe:04 5512042
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f30403ad000-7f30403c4000 r-xp 00000000 fe:04 393267
/lib/x86_64-linux-gnu/libgcc_s.so.1
7f30403c4000-7f30405c3000 ---p 00017000 fe:04 393267
/lib/x86_64-linux-gnu/libgcc_s.so.1
7f30405c3000-7f30405c4000 r--p 00016000 fe:04 393267
/lib/x86_64-linux-gnu/libgcc_s.so.1
7f30405c4000-7f30405c5000 rw-p 00017000 fe:04 393267
/lib/x86_64-linux-gnu/libgcc_s.so.1
7f30405c5000-7f30406c8000 r-xp 00000000 fe:04 396688
/lib/x86_64-linux-gnu/libm-2.24.so
7f30406c8000-7f30408c7000 ---p 00103000 fe:04 396688
/lib/x86_64-linux-gnu/libm-2.24.so
7f30408c7000-7f30408c8000 r--p 00102000 fe:04 396688
/lib/x86_64-linux-gnu/libm-2.24.so
7f30408c8000-7f30408c9000 rw-p 00103000 fe:04 396688
/lib/x86_64-linux-gnu/libm-2.24.so
7f30408c9000-7f3040b1a000 r-xp 00000000 fe:04 5621520
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0
7f3040b1a000-7f3040d19000 ---p 00251000 fe:04 5621520
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0
7f3040d19000-7f3040d1a000 r--p 00250000 fe:04 5621520
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0
7f3040d1a000-7f3040d1c000 rw-p 00251000 fe:04 5621520
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0
7f3040d1c000-7f3040d3f000 r-xp 00000000 fe:04 393406
/lib/x86_64-linux-gnu/ld-2.24.so
7f3040efc000-7f3040f00000 rw-p 00000000 00:00 0
7f3040f3b000-7f3040f3f000 rw-p 00000000 00:00 0
7f3040f3f000-7f3040f40000 r--p 00023000 fe:04 393406
/lib/x86_64-linux-gnu/ld-2.24.so
7f3040f40000-7f3040f41000 rw-p 00024000 fe:04 393406
/lib/x86_64-linux-gnu/ld-2.24.so
7f3040f41000-7f3040f42000 rw-p 00000000 00:00 0
7ffd282a1000-7ffd282c2000 rw-p 00000000 00:00 0
[stack]
7ffd2834b000-7ffd2834d000 r--p 00000000 00:00 0 [vvar]
7ffd2834d000-7ffd2834f000 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:
#0 0x7f30408e6201 in ???
#1 0x7f30408e5443 in ???
#2 0x7f303fe0305f in ???
#3 0x7f303fe02fff in ???
#4 0x7f303fe04429 in ???
#5 0x7f303fe40bff in ???
#6 0x7f303fe46fc5 in ???
#7 0x7f303fe4780d in ???
#8 0x55cc59a0fdef in test_pdt
at /home/alpha/src/fortran/23_Parametrized_derived_types/pdt.f90:26
#9 0x55cc59a0f89e in main
at /home/alpha/src/fortran/23_Parametrized_derived_types/pdt.f90:18
zsh: abort ./pdt
% gdb --args ./pdt
...
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff6ec142a in __GI_abort () at abort.c:89
#2 0x00007ffff6efdc00 in __libc_message (do_abort=do_abort@entry=2,
fmt=fmt@entry=0x7ffff6ff2d78 "*** Error in `%s': %s: 0x%s ***\n")
at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff6f03fc6 in malloc_printerr (action=3, str=0x7ffff6ff2ed0 "double
free or corruption (fasttop)", ptr=<optimized out>, ar_ptr=<optimized out>)
at malloc.c:5049
#4 0x00007ffff6f0480e in _int_free (av=0x7ffff7224b00 <main_arena>,
p=0x55555575a620, have_lock=0) at malloc.c:3905
#5 0x0000555555554df0 in test_pdt () at pdt.f90:26
#6 0x000055555555489f in main (argc=argc@entry=1, argv=0x7fffffffe734) at
pdt.f90:18
#7 0x00007ffff6ead2e1 in __libc_start_main (main=0x555555554880 <main>,
argc=1, argv=0x7fffffffe468, init=<optimized out>, fini=<optimized out>,
rtld_fini=<optimized out>, stack_end=0x7fffffffe458) at
../csu/libc-start.c:291
#8 0x00005555555548da in _start ()
% valgrind ./pdt
% valgrind ./pdt
==7993== Memcheck, a memory error detector
==7993== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==7993== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==7993== Command: ./pdt
==7993==
==7993== Invalid read of size 4
==7993== at 0x5040B40: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==7993== by 0x5040D50: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==7993== by 0x50454DD: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==7993== by 0x5046194: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==7993== by 0x108DCD: MAIN__ (pdt.f90:25)
==7993== by 0x10889E: main (pdt.f90:18)
==7993== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==7993== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==7993== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==7993== by 0x108D23: MAIN__ (pdt.f90:24)
==7993== by 0x10889E: main (pdt.f90:18)
==7993== Block was alloc'd at
==7993== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==7993== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==7993== by 0x108D23: MAIN__ (pdt.f90:24)
==7993== by 0x10889E: main (pdt.f90:18)
==7993==
3 3 5 7
==7993== Invalid free() / delete / delete[] / realloc()
==7993== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==7993== by 0x108DEF: MAIN__ (pdt.f90:26)
==7993== by 0x10889E: main (pdt.f90:18)
==7993== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==7993== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==7993== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==7993== by 0x108D23: MAIN__ (pdt.f90:24)
==7993== by 0x10889E: main (pdt.f90:18)
==7993== Block was alloc'd at
==7993== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==7993== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==7993== by 0x108D23: MAIN__ (pdt.f90:24)
==7993== by 0x10889E: main (pdt.f90:18)
==7993==
==7993==
==7993== HEAP SUMMARY:
==7993== in use at exit: 12 bytes in 1 blocks
==7993== total heap usage: 25 allocs, 25 frees, 13,544 bytes allocated
==7993==
==7993== LEAK SUMMARY:
==7993== definitely lost: 12 bytes in 1 blocks
==7993== indirectly lost: 0 bytes in 0 blocks
==7993== possibly lost: 0 bytes in 0 blocks
==7993== still reachable: 0 bytes in 0 blocks
==7993== suppressed: 0 bytes in 0 blocks
==7993== Rerun with --leak-check=full to see details of leaked memory
==7993==
==7993== For counts of detected and suppressed errors, rerun with: -v
==7993== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 0 from 0)
% valgrind --leak-check=full -v ./pdt
...
==8016== Invalid read of size 4
==8016== at 0x5040B40: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x5040D50: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x50454DD: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x5046194: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x108DCD: MAIN__ (pdt.f90:25)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Block was alloc'd at
==8016== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==8016== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016==
3 3 5 7
==8016== Invalid free() / delete / delete[] / realloc()
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108DEF: MAIN__ (pdt.f90:26)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Block was alloc'd at
==8016== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==8016== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016==
==8016==
==8016== HEAP SUMMARY:
==8016== in use at exit: 12 bytes in 1 blocks
==8016== total heap usage: 25 allocs, 25 frees, 13,544 bytes allocated
==8016==
==8016== Searching for pointers to 1 not-freed blocks
==8016== Checked 101,576 bytes
==8016==
==8016== 12 bytes in 1 blocks are definitely lost in loss record 1 of 1
==8016== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==8016== by 0x108CC4: MAIN__ (pdt.f90:26)
==8016== by 0x10889E: main (pdt.f90:18)
==8016==
==8016== LEAK SUMMARY:
==8016== definitely lost: 12 bytes in 1 blocks
==8016== indirectly lost: 0 bytes in 0 blocks
==8016== possibly lost: 0 bytes in 0 blocks
==8016== still reachable: 0 bytes in 0 blocks
==8016== suppressed: 0 bytes in 0 blocks
==8016==
==8016== ERROR SUMMARY: 5 errors from 3 contexts (suppressed: 0 from 0)
==8016==
==8016== 1 errors in context 1 of 3:
==8016== Invalid free() / delete / delete[] / realloc()
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108DEF: MAIN__ (pdt.f90:26)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Block was alloc'd at
==8016== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==8016== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016==
==8016==
==8016== 3 errors in context 2 of 3:
==8016== Invalid read of size 4
==8016== at 0x5040B40: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x5040D50: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x50454DD: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x5046194: ??? (in
/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0)
==8016== by 0x108DCD: MAIN__ (pdt.f90:25)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Address 0x5fa1bb0 is 0 bytes inside a block of size 12 free'd
==8016== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==8016== by 0x108AF0: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
==8016== Block was alloc'd at
==8016== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==8016== by 0x108A30: __pdt_m_MOD_addvv (pdt.f90:14)
==8016== by 0x108D23: MAIN__ (pdt.f90:24)
==8016== by 0x10889E: main (pdt.f90:18)
...
More information about the Gcc-bugs
mailing list