https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64535
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #15)
> I think we need to get a suppression into valgrind:
>
> ==21268== Memcheck, a memory error detector
> ==21268== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
> ==21268== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
> ==21268== Command: ./a.out
> ==21268==
> ==21268==
> ==21268== HEAP SUMMARY:
> ==21268== in use at exit: 72,704 bytes in 1 blocks
> ==21268== total heap usage: 5,747 allocs, 5,746 frees, 822,784 bytes
> allocated
> ==21268==
> ==21268== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
> ==21268== at 0x4A0645D: malloc (vg_replace_malloc.c:291)
> ==21268== by 0x4C990FF: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:117)
> ==21268== by 0x394940F2D9: call_init.part.0 (dl-init.c:82)
> ==21268== by 0x394940F3C2: _dl_init (dl-init.c:34)
> ==21268== by 0x3949401229: ??? (in /usr/lib64/ld-2.18.so)
> ==21268==
> ==21268== LEAK SUMMARY:
> ==21268== definitely lost: 0 bytes in 0 blocks
> ==21268== indirectly lost: 0 bytes in 0 blocks
> ==21268== possibly lost: 0 bytes in 0 blocks
> ==21268== still reachable: 72,704 bytes in 1 blocks
> ==21268== suppressed: 0 bytes in 0 blocks
> ==21268==
> ==21268== For counts of detected and suppressed errors, rerun with: -v
> ==21268== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
Or add a destructor.
Index: libstdc++-v3/libsupc++/eh_alloc.cc
===================================================================
--- libstdc++-v3/libsupc++/eh_alloc.cc (revision 220160)
+++ libstdc++-v3/libsupc++/eh_alloc.cc (working copy)
@@ -81,6 +81,7 @@ namespace
{
public:
pool();
+ ~pool();
void *allocate (std::size_t);
void free (void *);
@@ -240,6 +242,11 @@ namespace
&& p < arena + arena_size);
}
+ pool::~pool ()
+ {
+ free (arena);
+ }
+
pool emergency_pool;
}