IMCC has a fair few memory leaks, and most of them come (eventually) from
calls to str_dup().
Why are there so many calls to str_dup()? Look in compilers/imcc/symreg.c at
_mk_symreg(). This function takes a parameter, char *name. Here's the funny
part:
SymReg * r = _get_sym_typed(hsh, name, t);
if (r) {
free(name);
return r;
}
If you're asking yourself "Self, why would a function called _mk_symreg() that
takes a char * ever need to free that pointer?", then you get a cookie.
Plenty of other functions in IMCC mysteriously free passed-in pointers, which
is probably why there are so many defensive str_dup() calls splattered all
over the place. Moving memory management back where it belongs (that is,
when you're done with the pointer) ought to make it easier to plug these
leaks.
Patches more than welcome -- I've found that removing a random str_dup() then
running 'make' often makes a nice segfault that GDB is more than happy to
help you resolve.
-- c