When a block reward is spent together with other outputs in the wallet and that block reward is later orphaned, the wallet does not show the other funds as available anymore.  Even a `-rescan` is not enough - only `-zapwallettxes` or an explicit `abandontransaction` "recovers" the funds.  I prepared a [test case](https://github.com/domob1812/bitcoin/blob/wallet-bug-invalidated-block-rewards/test/functional/wallet_bug.py) that shows this behaviour.

Is this a known issue or the expected behaviour?  While this situation is something that will presumably not occur in practice (as it requires a long reorg), I wonder if that transaction should be automatically abandoned as it seems clear it won't be able to be confirmed anymore.
_dirs.push_back(fsPathFromString(w->GetDatabase().Filename()).parent_path());
        }
        // Unload ths
        for (stdshared_ptr<CWallet>& w  created_s) {
            if (!RemoveWallet(context, w, /*load_on_st
                error += _("\nUnable to cleanup failed migration");
                return utilError{error};
            }
            UnloadWallet(stdmove(w));
        }
        // Delete th directories
        for (fspath& dir  _dirs) {
            fsremove_all(dir);
        }
        // Restore the backup
        DatabaseStatus status;
        stdvector<bilingual_str> warnings;
        if (!RestoreWallet(context, temp_backup_location, _name, /*load_on_st, status, error, warnings)) {
            error += _("\nUnable to restore backup of .");
            return utilError{error};
        }
        // Move the backup to th dir
        fscopy_file(temp_backup_location, backup_path, fscopy_optionsnone);
        fsremove(temp_backup_location);
        return utilError{error};
    }
    return res;
}
} // namespac