| //@ run-pass | |
| // Makes sure we don't propagate generic instances of `Self: ?Sized` blanket impls. | |
| // This is relevant when we have an overlapping impl and builtin dyn instance. | |
| // See <https://github.com/rust-lang/rust/pull/114941> for more context. | |
| trait Trait { | |
| fn foo(&self) -> &'static str; | |
| } | |
| impl<T: ?Sized> Trait for T { | |
| fn foo(&self) -> &'static str { | |
| std::any::type_name::<T>() | |
| } | |
| } | |
| const fn bar<T: ?Sized>() -> fn(&T) -> &'static str { | |
| Trait::foo | |
| // If const prop were to propagate the instance | |
| } | |
| fn main() { | |
| assert_eq!("i32", bar::<dyn Trait>()(&1i32)); | |
| } |