Normalize the type Self resolves to in an impl

This is required at the very least in order to evaluate associated
constants for arrays (see #58212).
This commit is contained in:
Angelos Oikonomopoulos 2019-02-26 16:48:12 +01:00
parent ea43c3c688
commit 9b4055b302
2 changed files with 15 additions and 1 deletions

View file

@ -1700,7 +1700,8 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o {
// `Self` in impl (we know the concrete type).
assert_eq!(opt_self_ty, None);
self.prohibit_generics(&path.segments);
tcx.at(span).type_of(def_id)
// Try to evaluate any array length constants
self.normalize_ty(span, tcx.at(span).type_of(def_id))
}
Def::SelfTy(Some(_), None) => {
// `Self` in trait.

View file

@ -0,0 +1,13 @@
trait FromUnchecked {
unsafe fn from_unchecked();
}
impl FromUnchecked for [u8; 1] {
unsafe fn from_unchecked() {
let mut array: Self = std::mem::uninitialized();
let _ptr = &mut array as *mut [u8] as *mut u8;
}
}
fn main() {
}