Skip to content

Commit f444012

Browse files
committed
Auto merge of #13454 - samueltardieu:push-ymnkzlqloptz, r=xFrednet
Use correct std/core prefix in lint output changelog: none I was waiting for #13452 to be merged before sending this one. `std` is used instead of `core` when appropriate in messages.
2 parents 43e99e5 + 46a0770 commit f444012

6 files changed

+299
-47
lines changed

clippy_lints/src/ptr.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg, span_lint_and_then, span_lint_hir_and_then};
22
use clippy_utils::source::SpanRangeExt;
33
use clippy_utils::visitors::contains_unsafe_block;
4-
use clippy_utils::{get_expr_use_or_unification_node, is_lint_allowed, path_def_id, path_to_local};
4+
use clippy_utils::{get_expr_use_or_unification_node, is_lint_allowed, path_def_id, path_to_local, std_or_core};
55
use hir::LifetimeName;
66
use rustc_errors::{Applicability, MultiSpan};
77
use rustc_hir::hir_id::{HirId, HirIdMap};
@@ -294,14 +294,16 @@ fn check_invalid_ptr_usage<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
294294
};
295295

296296
for &arg_idx in arg_indices {
297-
if let Some(arg) = args.get(arg_idx).filter(|arg| is_null_path(cx, arg)) {
297+
if let Some(arg) = args.get(arg_idx).filter(|arg| is_null_path(cx, arg))
298+
&& let Some(std_or_core) = std_or_core(cx)
299+
{
298300
span_lint_and_sugg(
299301
cx,
300302
INVALID_NULL_PTR_USAGE,
301303
arg.span,
302304
"pointer must be non-null",
303305
"change this to",
304-
"core::ptr::NonNull::dangling().as_ptr()".to_string(),
306+
format!("{std_or_core}::ptr::NonNull::dangling().as_ptr()"),
305307
Applicability::MachineApplicable,
306308
);
307309
}

tests/ui/invalid_null_ptr_usage.fixed

+22-22
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
11
fn main() {
22
unsafe {
3-
let _slice: &[usize] = std::slice::from_raw_parts(core::ptr::NonNull::dangling().as_ptr(), 0);
4-
let _slice: &[usize] = std::slice::from_raw_parts(core::ptr::NonNull::dangling().as_ptr(), 0);
3+
let _slice: &[usize] = std::slice::from_raw_parts(std::ptr::NonNull::dangling().as_ptr(), 0);
4+
let _slice: &[usize] = std::slice::from_raw_parts(std::ptr::NonNull::dangling().as_ptr(), 0);
55

6-
let _slice: &[usize] = std::slice::from_raw_parts_mut(core::ptr::NonNull::dangling().as_ptr(), 0);
6+
let _slice: &[usize] = std::slice::from_raw_parts_mut(std::ptr::NonNull::dangling().as_ptr(), 0);
77

8-
std::ptr::copy::<usize>(core::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
9-
std::ptr::copy::<usize>(std::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
8+
std::ptr::copy::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
9+
std::ptr::copy::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
1010

11-
std::ptr::copy_nonoverlapping::<usize>(core::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
12-
std::ptr::copy_nonoverlapping::<usize>(std::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
11+
std::ptr::copy_nonoverlapping::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
12+
std::ptr::copy_nonoverlapping::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::NonNull::dangling().as_ptr(), 0);
1313

1414
struct A; // zero sized struct
1515
assert_eq!(std::mem::size_of::<A>(), 0);
1616

17-
let _a: A = std::ptr::read(core::ptr::NonNull::dangling().as_ptr());
18-
let _a: A = std::ptr::read(core::ptr::NonNull::dangling().as_ptr());
17+
let _a: A = std::ptr::read(std::ptr::NonNull::dangling().as_ptr());
18+
let _a: A = std::ptr::read(std::ptr::NonNull::dangling().as_ptr());
1919

20-
let _a: A = std::ptr::read_unaligned(core::ptr::NonNull::dangling().as_ptr());
21-
let _a: A = std::ptr::read_unaligned(core::ptr::NonNull::dangling().as_ptr());
20+
let _a: A = std::ptr::read_unaligned(std::ptr::NonNull::dangling().as_ptr());
21+
let _a: A = std::ptr::read_unaligned(std::ptr::NonNull::dangling().as_ptr());
2222

23-
let _a: A = std::ptr::read_volatile(core::ptr::NonNull::dangling().as_ptr());
24-
let _a: A = std::ptr::read_volatile(core::ptr::NonNull::dangling().as_ptr());
23+
let _a: A = std::ptr::read_volatile(std::ptr::NonNull::dangling().as_ptr());
24+
let _a: A = std::ptr::read_volatile(std::ptr::NonNull::dangling().as_ptr());
2525

26-
let _a: A = std::ptr::replace(core::ptr::NonNull::dangling().as_ptr(), A);
26+
let _a: A = std::ptr::replace(std::ptr::NonNull::dangling().as_ptr(), A);
2727
let _slice: *const [usize] = std::ptr::slice_from_raw_parts(std::ptr::null_mut(), 0); // shouldn't lint
2828
let _slice: *const [usize] = std::ptr::slice_from_raw_parts_mut(std::ptr::null_mut(), 0);
2929

30-
std::ptr::swap::<A>(core::ptr::NonNull::dangling().as_ptr(), &mut A);
31-
std::ptr::swap::<A>(&mut A, core::ptr::NonNull::dangling().as_ptr());
30+
std::ptr::swap::<A>(std::ptr::NonNull::dangling().as_ptr(), &mut A);
31+
std::ptr::swap::<A>(&mut A, std::ptr::NonNull::dangling().as_ptr());
3232

33-
std::ptr::swap_nonoverlapping::<A>(core::ptr::NonNull::dangling().as_ptr(), &mut A, 0);
34-
std::ptr::swap_nonoverlapping::<A>(&mut A, core::ptr::NonNull::dangling().as_ptr(), 0);
33+
std::ptr::swap_nonoverlapping::<A>(std::ptr::NonNull::dangling().as_ptr(), &mut A, 0);
34+
std::ptr::swap_nonoverlapping::<A>(&mut A, std::ptr::NonNull::dangling().as_ptr(), 0);
3535

36-
std::ptr::write(core::ptr::NonNull::dangling().as_ptr(), A);
36+
std::ptr::write(std::ptr::NonNull::dangling().as_ptr(), A);
3737

38-
std::ptr::write_unaligned(core::ptr::NonNull::dangling().as_ptr(), A);
38+
std::ptr::write_unaligned(std::ptr::NonNull::dangling().as_ptr(), A);
3939

40-
std::ptr::write_volatile(core::ptr::NonNull::dangling().as_ptr(), A);
40+
std::ptr::write_volatile(std::ptr::NonNull::dangling().as_ptr(), A);
4141

42-
std::ptr::write_bytes::<usize>(core::ptr::NonNull::dangling().as_ptr(), 42, 0);
42+
std::ptr::write_bytes::<usize>(std::ptr::NonNull::dangling().as_ptr(), 42, 0);
4343
}
4444
}

tests/ui/invalid_null_ptr_usage.stderr

+22-22
Original file line numberDiff line numberDiff line change
@@ -2,135 +2,135 @@ error: pointer must be non-null
22
--> tests/ui/invalid_null_ptr_usage.rs:3:59
33
|
44
LL | let _slice: &[usize] = std::slice::from_raw_parts(std::ptr::null(), 0);
5-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
5+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
66
|
77
= note: `#[deny(clippy::invalid_null_ptr_usage)]` on by default
88

99
error: pointer must be non-null
1010
--> tests/ui/invalid_null_ptr_usage.rs:4:59
1111
|
1212
LL | let _slice: &[usize] = std::slice::from_raw_parts(std::ptr::null_mut(), 0);
13-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
13+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
1414

1515
error: pointer must be non-null
1616
--> tests/ui/invalid_null_ptr_usage.rs:6:63
1717
|
1818
LL | let _slice: &[usize] = std::slice::from_raw_parts_mut(std::ptr::null_mut(), 0);
19-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
19+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
2020

2121
error: pointer must be non-null
2222
--> tests/ui/invalid_null_ptr_usage.rs:8:33
2323
|
2424
LL | std::ptr::copy::<usize>(std::ptr::null(), std::ptr::NonNull::dangling().as_ptr(), 0);
25-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
25+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
2626

2727
error: pointer must be non-null
2828
--> tests/ui/invalid_null_ptr_usage.rs:9:73
2929
|
3030
LL | std::ptr::copy::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::null_mut(), 0);
31-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
31+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
3232

3333
error: pointer must be non-null
3434
--> tests/ui/invalid_null_ptr_usage.rs:11:48
3535
|
3636
LL | std::ptr::copy_nonoverlapping::<usize>(std::ptr::null(), std::ptr::NonNull::dangling().as_ptr(), 0);
37-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
37+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
3838

3939
error: pointer must be non-null
4040
--> tests/ui/invalid_null_ptr_usage.rs:12:88
4141
|
4242
LL | std::ptr::copy_nonoverlapping::<usize>(std::ptr::NonNull::dangling().as_ptr(), std::ptr::null_mut(), 0);
43-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
43+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
4444

4545
error: pointer must be non-null
4646
--> tests/ui/invalid_null_ptr_usage.rs:17:36
4747
|
4848
LL | let _a: A = std::ptr::read(std::ptr::null());
49-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
49+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
5050

5151
error: pointer must be non-null
5252
--> tests/ui/invalid_null_ptr_usage.rs:18:36
5353
|
5454
LL | let _a: A = std::ptr::read(std::ptr::null_mut());
55-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
55+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
5656

5757
error: pointer must be non-null
5858
--> tests/ui/invalid_null_ptr_usage.rs:20:46
5959
|
6060
LL | let _a: A = std::ptr::read_unaligned(std::ptr::null());
61-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
61+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
6262

6363
error: pointer must be non-null
6464
--> tests/ui/invalid_null_ptr_usage.rs:21:46
6565
|
6666
LL | let _a: A = std::ptr::read_unaligned(std::ptr::null_mut());
67-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
67+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
6868

6969
error: pointer must be non-null
7070
--> tests/ui/invalid_null_ptr_usage.rs:23:45
7171
|
7272
LL | let _a: A = std::ptr::read_volatile(std::ptr::null());
73-
| ^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
73+
| ^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
7474

7575
error: pointer must be non-null
7676
--> tests/ui/invalid_null_ptr_usage.rs:24:45
7777
|
7878
LL | let _a: A = std::ptr::read_volatile(std::ptr::null_mut());
79-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
79+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
8080

8181
error: pointer must be non-null
8282
--> tests/ui/invalid_null_ptr_usage.rs:26:39
8383
|
8484
LL | let _a: A = std::ptr::replace(std::ptr::null_mut(), A);
85-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
85+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
8686

8787
error: pointer must be non-null
8888
--> tests/ui/invalid_null_ptr_usage.rs:30:29
8989
|
9090
LL | std::ptr::swap::<A>(std::ptr::null_mut(), &mut A);
91-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
91+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
9292

9393
error: pointer must be non-null
9494
--> tests/ui/invalid_null_ptr_usage.rs:31:37
9595
|
9696
LL | std::ptr::swap::<A>(&mut A, std::ptr::null_mut());
97-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
97+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
9898

9999
error: pointer must be non-null
100100
--> tests/ui/invalid_null_ptr_usage.rs:33:44
101101
|
102102
LL | std::ptr::swap_nonoverlapping::<A>(std::ptr::null_mut(), &mut A, 0);
103-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
103+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
104104

105105
error: pointer must be non-null
106106
--> tests/ui/invalid_null_ptr_usage.rs:34:52
107107
|
108108
LL | std::ptr::swap_nonoverlapping::<A>(&mut A, std::ptr::null_mut(), 0);
109-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
109+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
110110

111111
error: pointer must be non-null
112112
--> tests/ui/invalid_null_ptr_usage.rs:36:25
113113
|
114114
LL | std::ptr::write(std::ptr::null_mut(), A);
115-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
115+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
116116

117117
error: pointer must be non-null
118118
--> tests/ui/invalid_null_ptr_usage.rs:38:35
119119
|
120120
LL | std::ptr::write_unaligned(std::ptr::null_mut(), A);
121-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
121+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
122122

123123
error: pointer must be non-null
124124
--> tests/ui/invalid_null_ptr_usage.rs:40:34
125125
|
126126
LL | std::ptr::write_volatile(std::ptr::null_mut(), A);
127-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
127+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
128128

129129
error: pointer must be non-null
130130
--> tests/ui/invalid_null_ptr_usage.rs:42:40
131131
|
132132
LL | std::ptr::write_bytes::<usize>(std::ptr::null_mut(), 42, 0);
133-
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `core::ptr::NonNull::dangling().as_ptr()`
133+
| ^^^^^^^^^^^^^^^^^^^^ help: change this to: `std::ptr::NonNull::dangling().as_ptr()`
134134

135135
error: aborting due to 22 previous errors
136136

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#![no_std]
2+
#![feature(lang_items)]
3+
4+
use core::panic::PanicInfo;
5+
6+
#[lang = "eh_personality"]
7+
extern "C" fn eh_personality() {}
8+
9+
#[panic_handler]
10+
fn panic(info: &PanicInfo) -> ! {
11+
loop {}
12+
}
13+
14+
fn main() {
15+
unsafe {
16+
let _slice: &[usize] = core::slice::from_raw_parts(core::ptr::NonNull::dangling().as_ptr(), 0);
17+
let _slice: &[usize] = core::slice::from_raw_parts(core::ptr::NonNull::dangling().as_ptr(), 0);
18+
19+
let _slice: &[usize] = core::slice::from_raw_parts_mut(core::ptr::NonNull::dangling().as_ptr(), 0);
20+
21+
core::ptr::copy::<usize>(core::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
22+
core::ptr::copy::<usize>(core::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
23+
24+
core::ptr::copy_nonoverlapping::<usize>(core::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
25+
core::ptr::copy_nonoverlapping::<usize>(core::ptr::NonNull::dangling().as_ptr(), core::ptr::NonNull::dangling().as_ptr(), 0);
26+
27+
struct A; // zero sized struct
28+
assert_eq!(core::mem::size_of::<A>(), 0);
29+
30+
let _a: A = core::ptr::read(core::ptr::NonNull::dangling().as_ptr());
31+
let _a: A = core::ptr::read(core::ptr::NonNull::dangling().as_ptr());
32+
33+
let _a: A = core::ptr::read_unaligned(core::ptr::NonNull::dangling().as_ptr());
34+
let _a: A = core::ptr::read_unaligned(core::ptr::NonNull::dangling().as_ptr());
35+
36+
let _a: A = core::ptr::read_volatile(core::ptr::NonNull::dangling().as_ptr());
37+
let _a: A = core::ptr::read_volatile(core::ptr::NonNull::dangling().as_ptr());
38+
39+
let _a: A = core::ptr::replace(core::ptr::NonNull::dangling().as_ptr(), A);
40+
let _slice: *const [usize] = core::ptr::slice_from_raw_parts(core::ptr::null_mut(), 0); // shouldn't lint
41+
let _slice: *const [usize] = core::ptr::slice_from_raw_parts_mut(core::ptr::null_mut(), 0);
42+
43+
core::ptr::swap::<A>(core::ptr::NonNull::dangling().as_ptr(), &mut A);
44+
core::ptr::swap::<A>(&mut A, core::ptr::NonNull::dangling().as_ptr());
45+
46+
core::ptr::swap_nonoverlapping::<A>(core::ptr::NonNull::dangling().as_ptr(), &mut A, 0);
47+
core::ptr::swap_nonoverlapping::<A>(&mut A, core::ptr::NonNull::dangling().as_ptr(), 0);
48+
49+
core::ptr::write(core::ptr::NonNull::dangling().as_ptr(), A);
50+
51+
core::ptr::write_unaligned(core::ptr::NonNull::dangling().as_ptr(), A);
52+
53+
core::ptr::write_volatile(core::ptr::NonNull::dangling().as_ptr(), A);
54+
55+
core::ptr::write_bytes::<usize>(core::ptr::NonNull::dangling().as_ptr(), 42, 0);
56+
}
57+
}

0 commit comments

Comments
 (0)