disable_all_symbols implements "disable all, then enable some"
for symbols_enabled/groups_enabled. Using `disabled` status here
caused cascade-disable of hard dependents: if an enabled symbol
depended on a non-enabled one, the enabled symbol was wrongly
cascade-disabled.
Revert to `finished` for disable_all_symbols. Reserve `disabled`
status for explicit symbol/group disable via settings rules
(disable_symbol), where cascade-disable IS the intended behavior.
auto *dyn_item = &dynamic_items[i];
if (!(item->get_flags() & skip_mask)) {
- dyn_item->status = cache_item_status::disabled;
+ /*
+ * Use `finished` not `disabled`: this implements the "disable all,
+ * then enable some" pattern from symbols_enabled/groups_enabled.
+ * Using `disabled` would cascade-disable hard dependents, which is
+ * wrong when an enabled symbol depends on a non-enabled one.
+ */
+ dyn_item->status = cache_item_status::finished;
}
}
}