| //@ compile-flags: -O -Cdebug-assertions=on |
| //@ build-pass |
| |
| // A regression test for #151791. Computing the layout of |
| // `<AsOwned as ArchiveWith<'a>>::Archived` fails as the alias |
| // is still rigid as the where-bound in scope shadows the impl. |
| // |
| // This previously caused an incorrect error during MIR optimizations. |
| |
| struct ArchivedString; |
| |
| pub trait ArchiveWith<'a> { |
| type Archived; |
| } |
| |
| struct AsOwned; |
| impl ArchiveWith<'_> for AsOwned { |
| type Archived = ArchivedString; |
| } |
| |
| fn foo<'a>() |
| where |
| AsOwned: ArchiveWith<'a>, |
| { |
| let _ = unsafe { &*std::ptr::dangling::<<AsOwned as ArchiveWith<'a>>::Archived>() }; |
| } |
| |
| fn main() { |
| foo(); |
| } |