- /* link unused ones */
- list = NULL;
- for (i = n - 1; i >= 0; --i) {
- ent = get_class_member(frame_tp, i);
- if (get_entity_link(ent) == NULL) {
- set_entity_link(ent, list);
- list = ent;
- }
- }
+ /* link unused ones */
+ list = NULL;
+ for (i = n - 1; i >= 0; --i) {
+ ent = get_class_member(frame_tp, i);
+ /* beware of inner functions: those are NOT unused */
+ if (get_entity_link(ent) == NULL && !is_method_entity(ent)) {
+ set_entity_link(ent, list);
+ list = ent;
+ }
+ }
+
+ if (list != NULL) {
+ /* delete list members */
+ for (ent = list; ent; ent = list) {
+ list = get_entity_link(ent);
+ free_entity(ent);
+ }
+ /* we changed the frame type, it's layout should be redefined */
+ set_type_state(frame_tp, layout_undefined);
+ }
+ irp_free_resources(irp, IR_RESOURCE_ENTITY_LINK);
+}