- if (list) {
- /* delete list members */
- for (ent = list; ent; ent = list) {
- list = get_entity_link(ent);
- remove_class_member(frame_tp, ent);
- }
- /* we changed the frame type, it's layout should be redefined */
- set_type_state(frame_tp, layout_undefined);
- }
+ /* 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);
+ remove_class_member(frame_tp, 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);