mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge pull request #19106 from ShoyuVanilla/issue-18682
fix: Resolve projection types before checking casts
This commit is contained in:
commit
ef05ca5d3b
@ -374,6 +374,7 @@ enum PointerKind {
|
||||
|
||||
fn pointer_kind(ty: &Ty, table: &mut InferenceTable<'_>) -> Result<Option<PointerKind>, ()> {
|
||||
let ty = table.resolve_ty_shallow(ty);
|
||||
let ty = table.normalize_associated_types_in(ty);
|
||||
|
||||
if table.is_sized(&ty) {
|
||||
return Ok(Some(PointerKind::Thin));
|
||||
|
@ -1129,4 +1129,39 @@ fn main() {
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn regression_18682() {
|
||||
check_diagnostics(
|
||||
r#"
|
||||
//- minicore: coerce_unsized
|
||||
struct Flexible {
|
||||
body: [u8],
|
||||
}
|
||||
|
||||
trait Field {
|
||||
type Type: ?Sized;
|
||||
}
|
||||
|
||||
impl Field for Flexible {
|
||||
type Type = [u8];
|
||||
}
|
||||
|
||||
trait KnownLayout {
|
||||
type MaybeUninit: ?Sized;
|
||||
}
|
||||
|
||||
|
||||
impl<T> KnownLayout for [T] {
|
||||
type MaybeUninit = [T];
|
||||
}
|
||||
|
||||
struct ZerocopyKnownLayoutMaybeUninit(<<Flexible as Field>::Type as KnownLayout>::MaybeUninit);
|
||||
|
||||
fn test(ptr: *mut [u8]) -> *mut ZerocopyKnownLayoutMaybeUninit {
|
||||
ptr as *mut _
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user