plug more leaks
authorMatthias Braun <matze@braunis.de>
Thu, 15 Dec 2011 15:19:45 +0000 (16:19 +0100)
committerMatthias Braun <matze@braunis.de>
Mon, 19 Dec 2011 16:34:38 +0000 (17:34 +0100)
ir/be/belistsched.c
ir/common/firm.c
ir/debug/debugger.c
ir/debug/debugger.h
ir/ident/ident_t.h
ir/ident/mangle.c
ir/lower/lower_switch.c

index f946e1c..72d8c55 100644 (file)
@@ -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);
 }
index 1241268..a6bdfbf 100644 (file)
@@ -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();
index 3ce886c..695e107 100644 (file)
@@ -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.
  */
index dca0285..027184c 100644 (file)
@@ -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
  *
index a70cae9..74332f7 100644 (file)
@@ -40,4 +40,6 @@ void finish_ident(void);
 /** initializes the name mangling code */
 void firm_init_mangle(void);
 
+void firm_finish_mangle(void);
+
 #endif
index 2d68d85..f9b3ed1 100644 (file)
@@ -156,3 +156,8 @@ void firm_init_mangle(void)
 {
        obstack_init(&mangle_obst);
 }
+
+void firm_finish_mangle(void)
+{
+       obstack_free(&mangle_obst, NULL);
+}
index 6ca76e2..d9c130f 100644 (file)
@@ -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,