I'm thinking this check is incorrect. It was previously allowed to cast, say, `float64` to `int8`, and ufuncs also allow such casting. The forcecast going the other way should be the only change needed as it provides a type compatible work array, which is then copied back on success or discarded on failure. The test could check that `out` remains unchanged when the mode is `raise` and an indexing error occurs.