Currently trait upcasting is done via the Unsize/CoerceUnsized traits -- however, since CoerceUnsized works structurally, implementing dyn* upcasting via the same codepaths allows this erroneous code to make it to codegen and ICE:
https://github.com/rust-lang/rust/blob/d8cb8c37adfbfb641a1b30d3a2de3ba7226bb744/src/test/ui/dyn-star/no-unsize-coerce-dyn-trait.rs#L1-L13
That's why although dyn* trait upcasting was implemented in #101832, I removed it in #104594 due to introduced ICEs.
- We should decide first whether we actually want the burden of implementing
dyn* upcasting first, since dyn* is not currently intended to be user-facing syntax. Due to this, the feature is not currently needed even if it is interesting and possible theoretically.
- If we decide that we do want
dyn* upcasting, then it needs to be implemented separately from dyn Trait upcasting with a much narrower scope.
Currently trait upcasting is done via the
Unsize/CoerceUnsizedtraits -- however, sinceCoerceUnsizedworks structurally, implementingdyn*upcasting via the same codepaths allows this erroneous code to make it to codegen and ICE:https://github.com/rust-lang/rust/blob/d8cb8c37adfbfb641a1b30d3a2de3ba7226bb744/src/test/ui/dyn-star/no-unsize-coerce-dyn-trait.rs#L1-L13
That's why although
dyn*trait upcasting was implemented in #101832, I removed it in #104594 due to introduced ICEs.dyn*upcasting first, sincedyn*is not currently intended to be user-facing syntax. Due to this, the feature is not currently needed even if it is interesting and possible theoretically.dyn*upcasting, then it needs to be implemented separately fromdyn Traitupcasting with a much narrower scope.