Fix this leak:

160 bytes in 5 blocks are definitely lost in loss record 154 of 228
   at 0x4A0645D: malloc (in 
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x5D75D4F: xrealloc (xmalloc.c:177)
   by 0x4DE1710: void 
va_heap::reserve<gcc::jit::recording::block*>(vec<gcc::jit::recording::block*, 
va_heap, vl_embed>*&, unsigned int, bool) (vec.h:310)
   by 0x4DDFAB5: vec<gcc::jit::recording::block*, va_heap, 
vl_ptr>::reserve(unsigned int, bool) (vec.h:1428)
   by 0x4DDFBFC: vec<gcc::jit::recording::block*, va_heap, 
vl_ptr>::reserve_exact(unsigned int) (vec.h:1448)
   by 0x4DDE588: vec<gcc::jit::recording::block*, va_heap, 
vl_ptr>::create(unsigned int) (vec.h:1463)
   by 0x4DD9B9F: gcc::jit::recording::function::validate() 
(jit-recording.c:2191)
   by 0x4DD7AD3: gcc::jit::recording::context::validate() (jit-recording.c:1005)
   by 0x4DD7660: gcc::jit::recording::context::compile() (jit-recording.c:848)
   by 0x4DD5BD2: gcc_jit_context_compile (libgccjit.c:2014)
   by 0x401CA4: test_jit (harness.h:190)
   by 0x401D88: main (harness.h:232)

gcc/jit/ChangeLog:
        PR jit/63854
        * jit-recording.c (recording::function::validate): Convert
        "worklist" from vec<> to autovec<> to fix a leak.
---
 gcc/jit/jit-recording.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c
index 8daa8f2..8cce277 100644
--- a/gcc/jit/jit-recording.c
+++ b/gcc/jit/jit-recording.c
@@ -2187,8 +2187,7 @@ recording::function::validate ()
     {
       /* Iteratively walk the graph of blocks, marking their "m_is_reachable"
         flag, starting at the initial block.  */
-      vec<block *> worklist;
-      worklist.create (m_blocks.length ());
+      auto_vec<block *> worklist (m_blocks.length ());
       worklist.safe_push (m_blocks[0]);
       while (worklist.length () > 0)
        {
-- 
1.8.5.3

Reply via email to