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:
parent
ea43c3c688
commit
9b4055b302
2 changed files with 15 additions and 1 deletions
|
|
@ -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.
|
||||
|
|
|
|||
13
src/test/run-pass/issues/issue-58212.rs
Normal file
13
src/test/run-pass/issues/issue-58212.rs
Normal 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() {
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue