Forbid unsized structs which are non-instantiable

Closes #16977 

r?
It does? Where? I just skimmed through the diagnostic code and I'm not seeing any check to ensure the same string is always used with a given code.

If that were an actual restriction, wouldn't the string be associated with the code when registered, instead of being required on every `span_err!()` call?