Nonmoving GC may drop update remembered set blocks due to `setNumCapabilities`
`Storage.c:storageAddCapabilities` [currently has](https://gitlab.haskell.org/ghc/ghc/-/blob/929161943f19e1673288adc83d165ddc99865798/rts/sm/Storage.c#L325) the following:
```c
// Initialize NonmovingAllocators and UpdRemSets
if (RtsFlags.GcFlags.useNonmoving) {
nonmovingAddCapabilities(to);
for (i = 0; i < to; ++i) {
nonmovingInitUpdRemSet(&getCapability(i)->upd_rem_set);
}
}
```
This is subtly wrong: the lower iteration bound of 0 means we end up re-initializing (and therefore clearing) the update-remembered sets of capabilities which already exist. This lower bound rather should be `from`.
This can result in undefined behavior in programs using the nonmoving GC and `setNumCapabilities`.
issue