Skip to content

Commit b2e660b

Browse files
committed
changelog: [cast_slice_from_raw_parts]: properly select std/core
Signed-off-by: Zihan <[email protected]>
1 parent 8c319e2 commit b2e660b

File tree

3 files changed

+25
-23
lines changed

3 files changed

+25
-23
lines changed

clippy_lints/src/casts/cast_slice_from_raw_parts.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use clippy_utils::diagnostics::span_lint_and_sugg;
2-
use clippy_utils::get_parent_expr;
32
use clippy_utils::msrvs::{self, Msrv};
43
use clippy_utils::source::snippet_with_context;
4+
use clippy_utils::{get_parent_expr, is_no_std_crate};
55
use rustc_errors::Applicability;
66
use rustc_hir::def_id::DefId;
77
use rustc_hir::{Expr, ExprKind};
@@ -44,13 +44,14 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, cast_expr: &Expr<'_>,
4444
let mut applicability = Applicability::MachineApplicable;
4545
let ptr = snippet_with_context(cx, ptr_arg.span, ctxt, "ptr", &mut applicability).0;
4646
let len = snippet_with_context(cx, len_arg.span, ctxt, "len", &mut applicability).0;
47+
let krate = if is_no_std_crate(cx) { "core" } else { "std" };
4748
span_lint_and_sugg(
4849
cx,
4950
CAST_SLICE_FROM_RAW_PARTS,
5051
span,
5152
format!("casting the result of `{func}` to {cast_to}"),
5253
"replace with",
53-
format!("core::ptr::slice_{func}({ptr}, {len})"),
54+
format!("{krate}::ptr::slice_{func}({ptr}, {len})"),
5455
applicability,
5556
);
5657
}
@@ -81,13 +82,14 @@ pub(super) fn check_implicit_cast(cx: &LateContext<'_>, expr: &Expr<'_>) {
8182
let ctxt = expr.span.ctxt();
8283
let ptr = snippet_with_context(cx, ptr_arg.span, ctxt, "ptr", &mut applicability).0;
8384
let len = snippet_with_context(cx, len_arg.span, ctxt, "len", &mut applicability).0;
85+
let krate = if is_no_std_crate(cx) { "core" } else { "std" };
8486
span_lint_and_sugg(
8587
cx,
8688
CAST_SLICE_FROM_RAW_PARTS,
8789
expr.span,
8890
format!("implicitly casting the result of `{func}` to `{target}`"),
8991
"replace_with",
90-
format!("core::ptr::slice_{func}({ptr}, {len})"),
92+
format!("{krate}::ptr::slice_{func}({ptr}, {len})"),
9193
applicability,
9294
);
9395
}

tests/ui/cast_raw_slice_pointer_cast.fixed

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,36 @@ fn main() {
77
let mut vec = vec![0u8; 1];
88
let ptr: *const u8 = vec.as_ptr();
99
let mptr = vec.as_mut_ptr();
10-
let _: *const [u8] = unsafe { core::ptr::slice_from_raw_parts(ptr, 1) };
10+
let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts(ptr, 1) };
1111
//~^ cast_slice_from_raw_parts
12-
let _: *const [u8] = unsafe { core::ptr::slice_from_raw_parts_mut(mptr, 1) };
12+
let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts_mut(mptr, 1) };
1313
//~^ cast_slice_from_raw_parts
14-
let _: *const [u8] = core::ptr::slice_from_raw_parts(ptr, 1);
14+
let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
1515
//~^ cast_slice_from_raw_parts
1616
{
1717
use core::slice;
18-
let _: *const [u8] = core::ptr::slice_from_raw_parts(ptr, 1);
18+
let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
1919
//~^ cast_slice_from_raw_parts
2020
use slice as one;
21-
let _: *const [u8] = core::ptr::slice_from_raw_parts(ptr, 1);
21+
let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
2222
//~^ cast_slice_from_raw_parts
2323
}
2424
{
2525
use std::slice;
26-
let _: *const [u8] = core::ptr::slice_from_raw_parts(ptr, 1);
26+
let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
2727
//~^ cast_slice_from_raw_parts
2828
use slice as one;
29-
let _: *const [u8] = core::ptr::slice_from_raw_parts(ptr, 1);
29+
let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
3030
//~^ cast_slice_from_raw_parts
3131
}
3232

3333
// implicit cast
3434
{
35-
let _: *const [u8] = unsafe { core::ptr::slice_from_raw_parts(ptr, 1) };
35+
let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts(ptr, 1) };
3636
//~^ cast_slice_from_raw_parts
37-
let _: *mut [u8] = unsafe { core::ptr::slice_from_raw_parts_mut(mptr, 1) };
37+
let _: *mut [u8] = unsafe { std::ptr::slice_from_raw_parts_mut(mptr, 1) };
3838
//~^ cast_slice_from_raw_parts
39-
require_raw_slice_ptr(unsafe { core::ptr::slice_from_raw_parts(ptr, 1) });
39+
require_raw_slice_ptr(unsafe { std::ptr::slice_from_raw_parts(ptr, 1) });
4040
//~^ cast_slice_from_raw_parts
4141
}
4242
}

tests/ui/cast_raw_slice_pointer_cast.stderr

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ error: casting the result of `from_raw_parts` to *const [u8]
22
--> tests/ui/cast_raw_slice_pointer_cast.rs:10:35
33
|
44
LL | let _: *const [u8] = unsafe { std::slice::from_raw_parts(ptr, 1) as *const [u8] };
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
66
|
77
= note: `-D clippy::cast-slice-from-raw-parts` implied by `-D warnings`
88
= help: to override `-D warnings` add `#[allow(clippy::cast_slice_from_raw_parts)]`
@@ -11,55 +11,55 @@ error: casting the result of `from_raw_parts_mut` to *mut [u8]
1111
--> tests/ui/cast_raw_slice_pointer_cast.rs:12:35
1212
|
1313
LL | let _: *const [u8] = unsafe { std::slice::from_raw_parts_mut(mptr, 1) as *mut [u8] };
14-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts_mut(mptr, 1)`
14+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts_mut(mptr, 1)`
1515

1616
error: casting the result of `from_raw_parts` to *const [u8]
1717
--> tests/ui/cast_raw_slice_pointer_cast.rs:14:26
1818
|
1919
LL | let _: *const [u8] = unsafe { std::slice::from_raw_parts(ptr, 1) } as *const [u8];
20-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
20+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
2121

2222
error: casting the result of `from_raw_parts` to *const [u8]
2323
--> tests/ui/cast_raw_slice_pointer_cast.rs:18:30
2424
|
2525
LL | let _: *const [u8] = unsafe { slice::from_raw_parts(ptr, 1) } as *const [u8];
26-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
26+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
2727

2828
error: casting the result of `from_raw_parts` to *const [u8]
2929
--> tests/ui/cast_raw_slice_pointer_cast.rs:21:30
3030
|
3131
LL | let _: *const [u8] = unsafe { one::from_raw_parts(ptr, 1) } as *const [u8];
32-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
32+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
3333

3434
error: casting the result of `from_raw_parts` to *const [u8]
3535
--> tests/ui/cast_raw_slice_pointer_cast.rs:26:30
3636
|
3737
LL | let _: *const [u8] = unsafe { slice::from_raw_parts(ptr, 1) } as *const [u8];
38-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
38+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
3939

4040
error: casting the result of `from_raw_parts` to *const [u8]
4141
--> tests/ui/cast_raw_slice_pointer_cast.rs:29:30
4242
|
4343
LL | let _: *const [u8] = unsafe { one::from_raw_parts(ptr, 1) } as *const [u8];
44-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `core::ptr::slice_from_raw_parts(ptr, 1)`
44+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `std::ptr::slice_from_raw_parts(ptr, 1)`
4545

4646
error: implicitly casting the result of `from_raw_parts` to `*const [u8]`
4747
--> tests/ui/cast_raw_slice_pointer_cast.rs:35:39
4848
|
4949
LL | let _: *const [u8] = unsafe { std::slice::from_raw_parts(ptr, 1) };
50-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `core::ptr::slice_from_raw_parts(ptr, 1)`
50+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `std::ptr::slice_from_raw_parts(ptr, 1)`
5151

5252
error: implicitly casting the result of `from_raw_parts_mut` to `*mut [u8]`
5353
--> tests/ui/cast_raw_slice_pointer_cast.rs:37:37
5454
|
5555
LL | let _: *mut [u8] = unsafe { std::slice::from_raw_parts_mut(mptr, 1) };
56-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `core::ptr::slice_from_raw_parts_mut(mptr, 1)`
56+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `std::ptr::slice_from_raw_parts_mut(mptr, 1)`
5757

5858
error: implicitly casting the result of `from_raw_parts` to `*const [u8]`
5959
--> tests/ui/cast_raw_slice_pointer_cast.rs:39:40
6060
|
6161
LL | require_raw_slice_ptr(unsafe { std::slice::from_raw_parts(ptr, 1) });
62-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `core::ptr::slice_from_raw_parts(ptr, 1)`
62+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_with: `std::ptr::slice_from_raw_parts(ptr, 1)`
6363

6464
error: aborting due to 10 previous errors
6565

0 commit comments

Comments
 (0)