Anonymous | Login | Signup for a new account | 2023-06-08 20:07 CEST |
Main | My View | View Issues |
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 |
![]() ![]() ![]() ![]() |
||||||||
|
![]() |
|
(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. |
Mantis 1.1.5[^] Copyright © 2000 - 2008 Mantis Group |