From 2c8cc375a52fbfb9bdf15ebed6278a6d7b23a6ff Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 17 Feb 2011 22:20:23 +0000 Subject: [PATCH] Fixed iterations broken with size_t refactoring. Some iterations must be done backwards. [r28401] --- ir/tr/type.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/ir/tr/type.c b/ir/tr/type.c index 3c227040c..87050c510 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -758,15 +758,16 @@ ir_type *new_d_type_class(ident *name, type_dbg_info *db) ir_type *new_type_class(ident *name) { - return new_d_type_class (name, NULL); + return new_d_type_class(name, NULL); } void free_class_entities(ir_type *clss) { - size_t i, n; + size_t i; assert(clss && (clss->type_op == type_class)); - for (i = 0, n = get_class_n_members(clss); i < n; ++i) - free_entity(get_class_member(clss, i)); + /* we must iterate backward here */ + for (i = get_class_n_members(clss); i > 0;) + free_entity(get_class_member(clss, --i)); /* do NOT free the type info here. It belongs to another class */ } @@ -1075,10 +1076,11 @@ ir_type *new_type_struct(ident *name) void free_struct_entities(ir_type *strct) { - size_t i, n; + size_t i; assert(strct && (strct->type_op == type_struct)); - for (i = 0, n = get_struct_n_members(strct); i < n; ++i) - free_entity(get_struct_member(strct, i)); + /* we must iterate backward here */ + for (i = get_struct_n_members(strct); i > 0;) + free_entity(get_struct_member(strct, --i)); } void free_struct_attrs(ir_type *strct) @@ -1535,13 +1537,14 @@ ir_type *new_type_union(ident *name) void free_union_entities(ir_type *uni) { - size_t i, n; + size_t i; assert(uni && (uni->type_op == type_union)); - for (i = 0, n = get_union_n_members(uni); i < n; ++i) - free_entity(get_union_member(uni, i)); + /* we must iterate backward here */ + for (i = get_union_n_members(uni); i > 0;) + free_entity(get_union_member(uni, --i)); } -void free_union_attrs (ir_type *uni) +void free_union_attrs(ir_type *uni) { assert(uni && (uni->type_op == type_union)); DEL_ARR_F(uni->attr.ua.members); -- 2.20.1