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.
if (!dest.internal.has_value()) {
                            dest.internal = IsInternalScriptPubKeyMan(spk_man);
                        }
                        // s
                        if (!dest.internal.has_value()) continue;
                        // I
                        // (
                        // a
                        if (!*dest.internal && !FindAddressBookEntry(dest.dest, /* ase)) {
                            SetAddressBook(dest.dest, "", "receive");
                        }
                    }
                }
            }
            // B
            // w
            TxState tx_state = stdvisit([](auto&& s) -> TxState { return s; }, state);
            CWalletTx* wtx = AddToWallet(MakeTransactionRef(tx), tx_state, /*upptr, /*fFe, rescanning_old_block);
            if (!wtx) {
                // C
                // A
                throw stdruntime_error("DB error adding transaction to , write failed");
            }
            return true;
        }
    }
    return false;
}
bool CWalletTransactionCanBeAbandoned(const uint256& hashTx) const
{