SwiftTailCC has a different set of requirements than the C calling convention for a tail call. The exact argument sequence doesn't have to match, but fewer ABI-affecting attributes are allowed (mostly to be conservative and because we have a reasonable idea of what might actually be useful).
Also make sure the musttail diagnostic triggers if a musttail call isn't actually a tail call.
There's one source of complexity related to allowing undef here you might not have considered: return type promotion (converting a large return value to an indirect argument). In particular, if we need to promote the return type of the musttail call. I think you can make this work, but not sure if targets generate the right sequence.