in `copyto_impl!`, shadow a name as intended to ensure type stability (#54204)
Not sure how much this matters, if at all, given that the compiler seems
to be pretty smart nowadays, but clearly the intent behind the code was
to shadow `src` with the `let` block, to prevent the variable from
changing type during run time.
NB: union splitting seems to save the day anyway, but "better be safe
than sorry", I guess