From: Sebastian Buchwald Date: Thu, 31 Jul 2008 21:02:34 +0000 (+0000) Subject: Fixed revision 20864. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=795490b811a500c73a408d3e5bf68fdeaa8a15ae;p=libfirm Fixed revision 20864. [r20866] --- diff --git a/ir/common/firm.c b/ir/common/firm.c index 9db53d9e9..7ebdf3ee0 100644 --- a/ir/common/firm.c +++ b/ir/common/firm.c @@ -174,7 +174,6 @@ void free_firm(void) { for (i = get_irp_n_types() - 1; i >= 0; --i) free_type(get_irp_type(i)); - finish_op(); free_ir_prog(); finish_tarval(); diff --git a/ir/ir/irprog.c b/ir/ir/irprog.c index 7a36119e9..bdcdae2c2 100644 --- a/ir/ir/irprog.c +++ b/ir/ir/irprog.c @@ -36,6 +36,7 @@ #include "irgraph_t.h" #include "pseudo_irg.h" #include "array.h" +#include "error.h" #include "obst.h" #include "irop_t.h" #include "irmemory.h" @@ -138,12 +139,14 @@ void free_ir_prog(void) { free_type(irp->segment_types[i]); } + free_ir_graph(irp->const_code_irg); DEL_ARR_F(irp->graphs); DEL_ARR_F(irp->pseudo_graphs); DEL_ARR_F(irp->types); DEL_ARR_F(irp->modes); + + finish_op(); DEL_ARR_F(irp->opcodes); - free_ir_graph(irp->const_code_irg); irp->name = NULL; irp->const_code_irg = NULL; @@ -322,14 +325,15 @@ void remove_irp_opcode(ir_op *opcode) { assert(opcode); for (i = ARR_LEN(irp->opcodes) -1; i >= 0; i--) { - if (irp->opcodes[i] == opcode) { - for (; i < (ARR_LEN(irp->opcodes)) - 1; i++) { - irp->opcodes[i] = irp->opcodes[i+1]; - } - ARR_SETLEN(ir_op *, irp->opcodes, (ARR_LEN(irp->opcodes)) - 1); - break; + if (irp->opcodes[i] != opcode) + continue; + for (; i < (ARR_LEN(irp->opcodes)) - 1; i++) { + irp->opcodes[i] = irp->opcodes[i+1]; } + ARR_SETLEN(ir_op *, irp->opcodes, (ARR_LEN(irp->opcodes)) - 1); + return; } + panic("Deleting unknown opcode"); } /* Returns the number of all opcodes in the irp. */