Skip to content

Commit c7bc41f

Browse files
committed
add test
1 parent 3891009 commit c7bc41f

File tree

4 files changed

+135
-0
lines changed

4 files changed

+135
-0
lines changed

compiler/rustc_lint/src/builtin.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// ignore-tidy-filelength
2+
13
//! Lints in the Rust compiler.
24
//!
35
//! This contains lints which can feasibly be implemented as their own

src/test/ui/cleanup-shortcircuit.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
// pretty-expanded FIXME #23616
55

6+
#![allow(deref_nullptr)]
7+
8+
69
use std::env;
710

811
pub fn main() {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// test the deref_nullptr lint
2+
3+
#![deny(deref_nullptr)]
4+
5+
fn f() {
6+
unsafe {
7+
let a = 1;
8+
let ub = *(a as *const i32);
9+
let ub = *(0 as *const i32);
10+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
11+
let ub = *core::ptr::null::<i32>();
12+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
13+
let ub = *core::ptr::null_mut::<i32>();
14+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
15+
let ub = *(core::ptr::null::<i16>() as *const i32);
16+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
17+
let ub = *(core::ptr::null::<i16>() as *mut i32 as *mut usize as *const u8);
18+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
19+
let ub = &*core::ptr::null::<i32>();
20+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
21+
core::ptr::addr_of!(*core::ptr::null::<i32>());
22+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
23+
std::ptr::addr_of_mut!(*core::ptr::null_mut::<i32>());
24+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
25+
let ub = *std::ptr::null::<i32>();
26+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
27+
let ub = *std::ptr::null_mut::<i32>();
28+
//~^ ERROR Dereferencing a null pointer causes undefined behavior
29+
}
30+
}
31+
32+
fn main() {}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
error: Dereferencing a null pointer causes undefined behavior
2+
--> $DIR/lint-deref-nullptr.rs:9:18
3+
|
4+
LL | let ub = *(0 as *const i32);
5+
| ^^^^^^^^^^^^^^^^^^
6+
| |
7+
| a null pointer is dereferenced
8+
| this code causes undefined behavior when executed
9+
|
10+
note: the lint level is defined here
11+
--> $DIR/lint-deref-nullptr.rs:3:9
12+
|
13+
LL | #![deny(deref_nullptr)]
14+
| ^^^^^^^^^^^^^
15+
16+
error: Dereferencing a null pointer causes undefined behavior
17+
--> $DIR/lint-deref-nullptr.rs:11:18
18+
|
19+
LL | let ub = *core::ptr::null::<i32>();
20+
| ^^^^^^^^^^^^^^^^^^^^^^^^^
21+
| |
22+
| a null pointer is dereferenced
23+
| this code causes undefined behavior when executed
24+
25+
error: Dereferencing a null pointer causes undefined behavior
26+
--> $DIR/lint-deref-nullptr.rs:13:18
27+
|
28+
LL | let ub = *core::ptr::null_mut::<i32>();
29+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
30+
| |
31+
| a null pointer is dereferenced
32+
| this code causes undefined behavior when executed
33+
34+
error: Dereferencing a null pointer causes undefined behavior
35+
--> $DIR/lint-deref-nullptr.rs:15:18
36+
|
37+
LL | let ub = *(core::ptr::null::<i16>() as *const i32);
38+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39+
| |
40+
| a null pointer is dereferenced
41+
| this code causes undefined behavior when executed
42+
43+
error: Dereferencing a null pointer causes undefined behavior
44+
--> $DIR/lint-deref-nullptr.rs:17:18
45+
|
46+
LL | let ub = *(core::ptr::null::<i16>() as *mut i32 as *mut usize as *const u8);
47+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
48+
| |
49+
| a null pointer is dereferenced
50+
| this code causes undefined behavior when executed
51+
52+
error: Dereferencing a null pointer causes undefined behavior
53+
--> $DIR/lint-deref-nullptr.rs:19:19
54+
|
55+
LL | let ub = &*core::ptr::null::<i32>();
56+
| ^^^^^^^^^^^^^^^^^^^^^^^^^
57+
| |
58+
| a null pointer is dereferenced
59+
| this code causes undefined behavior when executed
60+
61+
error: Dereferencing a null pointer causes undefined behavior
62+
--> $DIR/lint-deref-nullptr.rs:21:29
63+
|
64+
LL | core::ptr::addr_of!(*core::ptr::null::<i32>());
65+
| ^^^^^^^^^^^^^^^^^^^^^^^^^
66+
| |
67+
| a null pointer is dereferenced
68+
| this code causes undefined behavior when executed
69+
70+
error: Dereferencing a null pointer causes undefined behavior
71+
--> $DIR/lint-deref-nullptr.rs:23:32
72+
|
73+
LL | std::ptr::addr_of_mut!(*core::ptr::null_mut::<i32>());
74+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75+
| |
76+
| a null pointer is dereferenced
77+
| this code causes undefined behavior when executed
78+
79+
error: Dereferencing a null pointer causes undefined behavior
80+
--> $DIR/lint-deref-nullptr.rs:25:18
81+
|
82+
LL | let ub = *std::ptr::null::<i32>();
83+
| ^^^^^^^^^^^^^^^^^^^^^^^^
84+
| |
85+
| a null pointer is dereferenced
86+
| this code causes undefined behavior when executed
87+
88+
error: Dereferencing a null pointer causes undefined behavior
89+
--> $DIR/lint-deref-nullptr.rs:27:18
90+
|
91+
LL | let ub = *std::ptr::null_mut::<i32>();
92+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
93+
| |
94+
| a null pointer is dereferenced
95+
| this code causes undefined behavior when executed
96+
97+
error: aborting due to 10 previous errors
98+

0 commit comments

Comments
 (0)