remove lots of unnecessary and dangerous current_ir_graph usages
[libfirm] / ir / opt / garbage_collect.c
index 5e8c529..9c27563 100644 (file)
@@ -45,12 +45,16 @@ static void visit_node(ir_node *node, void *env)
        ir_entity *entity;
        (void) env;
 
-       if (!is_SymConst(node))
-               return;
-       if (!SYMCONST_HAS_ENT(get_SymConst_kind(node)))
+       if (is_SymConst(node)) {
+               if (!SYMCONST_HAS_ENT(get_SymConst_kind(node)))
+                       return;
+               entity = get_SymConst_entity(node);
+       } else if (is_Sel(node)) {
+               entity = get_Sel_entity(node);
+       } else {
                return;
+       }
 
-       entity = get_SymConst_entity(node);
        visit_entity(entity);
 }
 
@@ -77,7 +81,7 @@ static void visit_initializer(ir_initializer_t *initializer)
 
        case IR_INITIALIZER_COMPOUND: {
                size_t i;
-               for(i = 0; i < initializer->compound.n_initializers; ++i) {
+               for (i = 0; i < initializer->compound.n_initializers; ++i) {
                        ir_initializer_t *subinitializer
                                = initializer->compound.initializers[i];
                        visit_initializer(subinitializer);
@@ -140,8 +144,7 @@ static void garbage_collect_in_segment(ir_type *segment)
 
                DB((dbg, LEVEL_1, "  removing entity %+F\n", entity));
 
-               /* TODO: this is O(n^2) improve our interfaces! */
-               remove_class_member(get_entity_owner(entity), entity);
+               free_entity(entity);
        }
 }