Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0000187 [libFirm] backend minor always 2016-12-07 12:35 2017-01-11 12:36
Reporter moben View Status public  
Assigned To mohr
Priority normal Resolution fixed  
Status resolved   Product Version development
Summary 0000187: Leak in co_collect_units
Description we are building libfirm with LeakSanitizer (clang 3.9) and it is detecting a memory leak in co_collect_units.

The corresponding .vcg file is attached. The called function in the inner loop is empty.

LeakSanitizer output:


=================================================================
==10958==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x5df618 in realloc /var/tmp/paludis/build/dev-libs-compiler-rt-3.9.0/work/compiler-rt-3.9.0.src/lib/asan/asan_malloc_linux.cc:77
    0000001 0x2b5773984bf7 in xrealloc /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/adt/xmalloc.c:36:20
    0000002 0x2b5773a1dcd4 in co_collect_units /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/be/becopyopt.c:406:17
    0000003 0x2b5773a3fc3a in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:39:2
    0000004 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000005 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000006 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000007 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000008 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000009 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000010 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    #11 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000012 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    #13 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000014 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000015 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000016 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000017 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000018 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000019 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000020 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000021 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000022 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000023 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000024 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    #25 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000026 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000027 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000028 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000029 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4

Direct leak of 4 byte(s) in 1 object(s) allocated from:
    #0 0x5df618 in realloc /var/tmp/paludis/build/dev-libs-compiler-rt-3.9.0/work/compiler-rt-3.9.0.src/lib/asan/asan_malloc_linux.cc:77
    0000001 0x2b5773984bf7 in xrealloc /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/adt/xmalloc.c:36:20
    0000002 0x2b5773a1dcfb in co_collect_units /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/be/becopyopt.c:407:17
    0000003 0x2b5773a3fc3a in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:39:2
    0000004 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000005 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000006 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000007 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000008 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000009 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000010 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    #11 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000012 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    #13 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000014 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000015 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000016 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000017 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000018 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000019 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000020 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000021 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000022 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000023 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000024 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    #25 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000026 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000027 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4
    0000028 0x2b5773a3fc7c in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:44:4
    0000029 0x2b5773a3fd2b in irg_walk_2_pre /home/moben/Hacking/Uni/compilerpraktikum/libfirm/ir/ir/irgwalk.c:48:4

SUMMARY: AddressSanitizer: 12 byte(s) leaked in 2 allocation(s).
Additional Information
Tags No tags attached.
Attached Files ? file icon main-00.vcg [^] (20,741 bytes) 2016-12-07 12:35
? file icon libfirm_leak.java [^] (237 bytes) 2016-12-07 15:17
? file icon firm-leak.patch [^] (893 bytes) 2017-01-10 10:22
? file icon firm-leak_v2.patch [^] (934 bytes) 2017-01-10 10:28

- Relationships

-  Notes
(0000281)
moben (reporter)
2016-12-07 12:37

Can also be reproduced with our compiler for the Compilerpraktikum (https://github.com/morrisfeist/kit-compilerpraktikum/), [^] called with " --firm-graph --compile-firm" and the attached MiniJava file.
(0000282)
moben (reporter)
2017-01-10 10:27

Attached a patch that fixes the issue for me.
Not sure if it is correct though.

What happens is that sometimes node_count == 1 in the Phi case, so realloc allocates memory.

But later the branch checks for node_count > 1 and frees the unit but not the contents. Maybe this should check >= 1 instead?
(0000283)
moben (reporter)
2017-01-10 10:28

added _v2 patch, can't delete the old one for some reason.
(0000285)
mohr (developer)
2017-01-11 12:35

Thanks for the report. I pushed a slightly adapted patch, fixed as of 380188c48f075ce0e3c0a18a7ec757d3e9f4cb8e.
(0000286)
mohr (developer)
2017-01-11 12:36

Fixed in 380188c48f075ce0e3c0a18a7ec757d3e9f4cb8e.

- Issue History
Date Modified Username Field Change
2016-12-07 12:35 moben New Issue
2016-12-07 12:35 moben File Added: main-00.vcg
2016-12-07 12:37 moben Note Added: 0000281
2016-12-07 15:17 moben File Added: libfirm_leak.java
2017-01-10 10:22 moben File Added: firm-leak.patch
2017-01-10 10:27 moben Note Added: 0000282
2017-01-10 10:28 moben File Added: firm-leak_v2.patch
2017-01-10 10:28 moben Note Added: 0000283
2017-01-11 12:35 mohr Note Added: 0000285
2017-01-11 12:36 mohr Note Added: 0000286
2017-01-11 12:36 mohr Status new => resolved
2017-01-11 12:36 mohr Resolution open => fixed
2017-01-11 12:36 mohr Assigned To => mohr


Mantis 1.1.5[^]
Copyright © 2000 - 2008 Mantis Group
Powered by Mantis Bugtracker