Skip to content

Commit

Permalink
Comment out cast checks for unknown ptr kind
Browse files Browse the repository at this point in the history
Just like we don't check for types containing unknown.
  • Loading branch information
ChayimFriedman2 committed Sep 30, 2024
1 parent 46fe025 commit 8115a18
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
19 changes: 12 additions & 7 deletions src/tools/rust-analyzer/crates/hir-ty/src/infer/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@ pub enum CastError {
NeedViaThinPtr,
NeedViaInt,
NonScalar,
UnknownCastPtrKind,
UnknownExprPtrKind,
// We don't want to report errors with unknown types currently.
// UnknownCastPtrKind,
// UnknownExprPtrKind,
}

impl CastError {
Expand Down Expand Up @@ -272,9 +273,10 @@ impl CastCheck {

match (src_kind, dst_kind) {
(Some(PointerKind::Error), _) | (_, Some(PointerKind::Error)) => Ok(()),
(_, None) => Err(CastError::UnknownCastPtrKind),
// (_, None) => Err(CastError::UnknownCastPtrKind),
// (None, _) => Err(CastError::UnknownExprPtrKind),
(_, None) | (None, _) => Ok(()),
(_, Some(PointerKind::Thin)) => Ok(()),
(None, _) => Err(CastError::UnknownExprPtrKind),
(Some(PointerKind::Thin), _) => Err(CastError::SizedUnsizedCast),
(Some(PointerKind::VTable(src_tty)), Some(PointerKind::VTable(dst_tty))) => {
let principal = |tty: &Binders<QuantifiedWhereClauses>| {
Expand Down Expand Up @@ -315,7 +317,8 @@ impl CastCheck {
expr_ty: &Ty,
) -> Result<(), CastError> {
match pointer_kind(expr_ty, table).map_err(|_| CastError::Unknown)? {
None => Err(CastError::UnknownExprPtrKind),
// None => Err(CastError::UnknownExprPtrKind),
None => Ok(()),
Some(PointerKind::Error) => Ok(()),
Some(PointerKind::Thin) => Ok(()),
_ => Err(CastError::NeedViaThinPtr),
Expand All @@ -328,7 +331,8 @@ impl CastCheck {
cast_ty: &Ty,
) -> Result<(), CastError> {
match pointer_kind(cast_ty, table).map_err(|_| CastError::Unknown)? {
None => Err(CastError::UnknownCastPtrKind),
// None => Err(CastError::UnknownCastPtrKind),
None => Ok(()),
Some(PointerKind::Error) => Ok(()),
Some(PointerKind::Thin) => Ok(()),
Some(PointerKind::VTable(_)) => Err(CastError::IntToFatCast),
Expand All @@ -343,7 +347,8 @@ impl CastCheck {
cast_ty: &Ty,
) -> Result<(), CastError> {
match pointer_kind(cast_ty, table).map_err(|_| CastError::Unknown)? {
None => Err(CastError::UnknownCastPtrKind),
// None => Err(CastError::UnknownCastPtrKind),
None => Ok(()),
Some(PointerKind::Error) => Ok(()),
Some(PointerKind::Thin) => Ok(()),
_ => Err(CastError::IllegalCast),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ pub(crate) fn invalid_cast(ctx: &DiagnosticsContext<'_>, d: &hir::InvalidCast) -
DiagnosticCode::RustcHardError("E0605"),
format_ty!(ctx, "non-primitive cast: `{}` as `{}`", d.expr_ty, d.cast_ty),
),
CastError::UnknownCastPtrKind | CastError::UnknownExprPtrKind => (
DiagnosticCode::RustcHardError("E0641"),
"cannot cast to a pointer of an unknown kind".to_owned(),
),
// CastError::UnknownCastPtrKind | CastError::UnknownExprPtrKind => (
// DiagnosticCode::RustcHardError("E0641"),
// "cannot cast to a pointer of an unknown kind".to_owned(),
// ),
};
Diagnostic::new(code, message, display_range)
}
Expand Down Expand Up @@ -457,20 +457,20 @@ fn foo<T: ?Sized>() {
);
}

#[test]
fn order_dependent_cast_inference() {
check_diagnostics(
r#"
//- minicore: sized
fn main() {
let x = &"hello";
let mut y = 0 as *const _;
//^^^^^^^^^^^^^ error: cannot cast to a pointer of an unknown kind
y = x as *const _;
}
"#,
);
}
// #[test]
// fn order_dependent_cast_inference() {
// check_diagnostics(
// r#"
// //- minicore: sized
// fn main() {
// let x = &"hello";
// let mut y = 0 as *const _;
// //^^^^^^^^^^^^^ error: cannot cast to a pointer of an unknown kind
// y = x as *const _;
// }
// "#,
// );
// }

#[test]
fn ptr_to_ptr_different_regions() {
Expand Down Expand Up @@ -1111,4 +1111,22 @@ fn foo() {
"#,
);
}

#[test]
fn cast_isize_to_infer_pointer() {
check_diagnostics(
r#"
//- minicore: coerce_unsized
struct Foo {}
struct Wrap<'a>(&'a mut Foo);
fn main() {
let lparam: isize = 0;
let _wrap = Wrap(unsafe { &mut *(lparam as *mut _) });
}
"#,
);
}
}

0 comments on commit 8115a18

Please sign in to comment.