Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/handlers/invalid_cast.rs')
-rw-r--r--crates/ide-diagnostics/src/handlers/invalid_cast.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/ide-diagnostics/src/handlers/invalid_cast.rs b/crates/ide-diagnostics/src/handlers/invalid_cast.rs
index a59077b757..7479f8147d 100644
--- a/crates/ide-diagnostics/src/handlers/invalid_cast.rs
+++ b/crates/ide-diagnostics/src/handlers/invalid_cast.rs
@@ -51,7 +51,7 @@ pub(crate) fn invalid_cast(ctx: &DiagnosticsContext<'_>, d: &hir::InvalidCast<'_
DiagnosticCode::RustcHardError("E0606"),
format_ty!(ctx, "casting `{}` as `{}` is invalid", d.expr_ty, d.cast_ty),
),
- CastError::IntToFatCast => (
+ CastError::IntToWideCast => (
DiagnosticCode::RustcHardError("E0606"),
format_ty!(ctx, "cannot cast `{}` to a fat pointer `{}`", d.expr_ty, d.cast_ty),
),
@@ -95,6 +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::PtrPtrAddingAutoTraits => (
+ DiagnosticCode::RustcHardError("E0804"),
+ "cannot add auto trait to dyn bound via pointer cast".to_owned(),
+ ),
// CastError::UnknownCastPtrKind | CastError::UnknownExprPtrKind => (
// DiagnosticCode::RustcHardError("E0641"),
// "cannot cast to a pointer of an unknown kind".to_owned(),
@@ -444,8 +448,8 @@ fn main() {
q as *const [i32];
//^^^^^^^^^^^^^^^^^ error: cannot cast thin pointer `*const i32` to fat pointer `*const [i32]`
- // FIXME: This should emit diagnostics but disabled to prevent many false positives
let t: *mut (dyn Trait + 'static) = 0 as *mut _;
+ //^^^^^^^^^^^ error: cannot cast `usize` to a fat pointer `*mut (dyn Trait + 'static)`
let mut fail: *const str = 0 as *const str;
//^^^^^^^^^^^^^^^ error: cannot cast `usize` to a fat pointer `*const str`
@@ -543,7 +547,7 @@ fn main() {
fn ptr_to_trait_obj_ok() {
check_diagnostics(
r#"
-//- minicore: pointee
+//- minicore: pointee, send, sync
trait Trait<'a> {}
fn remove_auto<'a>(x: *mut (dyn Trait<'a> + Send)) -> *mut dyn Trait<'a> {