Viewing Issue Advanced Details Jump to Notes ] View Simple ] 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 Platform
Status resolved   OS
Projection none   OS Version
ETA none Fixed in Version Product Version development
  Product Build
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).
Steps To Reproduce
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