From 86d52903da8846456936ce528f72a0d738861a73 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 15 Dec 2011 16:19:45 +0100 Subject: [PATCH] plug more leaks --- ir/be/belistsched.c | 2 ++ ir/common/firm.c | 4 ++++ ir/debug/debugger.c | 6 ++++++ ir/debug/debugger.h | 2 ++ ir/ident/ident_t.h | 2 ++ ir/ident/mangle.c | 5 +++++ ir/lower/lower_switch.c | 1 + 7 files changed, 22 insertions(+) diff --git a/ir/be/belistsched.c b/ir/be/belistsched.c index f946e1ca7..72d8c55fc 100644 --- a/ir/be/belistsched.c +++ b/ir/be/belistsched.c @@ -265,6 +265,8 @@ static void list_sched_block(ir_node *block, void *env_ptr) add_to_sched(&be, irn); } + ir_nodeset_destroy(cands); + if (selector->finish_block) selector->finish_block(be.selector_block_env); } diff --git a/ir/common/firm.c b/ir/common/firm.c index 1241268b2..a6bdfbf6f 100644 --- a/ir/common/firm.c +++ b/ir/common/firm.c @@ -121,11 +121,15 @@ void ir_init(void) void ir_finish(void) { +#ifdef DEBUG_libfirm + firm_finish_debugger(); +#endif free_ir_prog(); finish_tarval(); finish_mode(); finish_tpop(); + firm_finish_mangle(); finish_ident(); firm_be_finish(); diff --git a/ir/debug/debugger.c b/ir/debug/debugger.c index 3ce886c60..695e1078e 100644 --- a/ir/debug/debugger.c +++ b/ir/debug/debugger.c @@ -1280,6 +1280,12 @@ void firm_init_debugger(void) firm_debug_break(); } +void firm_finish_debugger(void) +{ + del_set(bp_numbers); + del_set(bp_idents); +} + /** * A gdb helper function to print firm objects. */ diff --git a/ir/debug/debugger.h b/ir/debug/debugger.h index dca02859b..027184c8e 100644 --- a/ir/debug/debugger.h +++ b/ir/debug/debugger.h @@ -43,6 +43,8 @@ void firm_break(const char *cmd); /** Creates the debugger tables. */ void firm_init_debugger(void); +void firm_finish_debugger(void); + /** * @defgroup external_debug helper functions for debuggers * diff --git a/ir/ident/ident_t.h b/ir/ident/ident_t.h index a70cae9ff..74332f7e8 100644 --- a/ir/ident/ident_t.h +++ b/ir/ident/ident_t.h @@ -40,4 +40,6 @@ void finish_ident(void); /** initializes the name mangling code */ void firm_init_mangle(void); +void firm_finish_mangle(void); + #endif diff --git a/ir/ident/mangle.c b/ir/ident/mangle.c index 2d68d857c..f9b3ed102 100644 --- a/ir/ident/mangle.c +++ b/ir/ident/mangle.c @@ -156,3 +156,8 @@ void firm_init_mangle(void) { obstack_init(&mangle_obst); } + +void firm_finish_mangle(void) +{ + obstack_free(&mangle_obst, NULL); +} diff --git a/ir/lower/lower_switch.c b/ir/lower/lower_switch.c index 6ca76e287..d9c130f32 100644 --- a/ir/lower/lower_switch.c +++ b/ir/lower/lower_switch.c @@ -165,6 +165,7 @@ static void analyse_switch1(switch_info_t *info) info->default_block = targets[pn_Switch_default]; info->cases = cases; + free(targets); } static void normalize_table(ir_node *switchn, ir_mode *new_mode, -- 2.20.1