summaryrefslogtreecommitdiffstats
path: root/tests/ui/lint/ptr_null_checks.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /tests/ui/lint/ptr_null_checks.rs
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz
rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/lint/ptr_null_checks.rs')
-rw-r--r--tests/ui/lint/ptr_null_checks.rs76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/ui/lint/ptr_null_checks.rs b/tests/ui/lint/ptr_null_checks.rs
new file mode 100644
index 000000000..e677ea309
--- /dev/null
+++ b/tests/ui/lint/ptr_null_checks.rs
@@ -0,0 +1,76 @@
+// check-pass
+
+#![feature(ptr_from_ref)]
+
+use std::ptr;
+
+extern "C" fn c_fn() {}
+fn static_i32() -> &'static i32 { &1 }
+
+fn main() {
+ let fn_ptr = main;
+
+ // ------------- Function pointers ---------------
+ if (fn_ptr as *mut ()).is_null() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *const u8).is_null() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *const ()) == std::ptr::null() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *mut ()) == std::ptr::null_mut() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *const ()) == (0 as *const ()) {}
+ //~^ WARN function pointers are not nullable
+ if <*const _>::is_null(fn_ptr as *const ()) {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *mut fn() as *const fn() as *const ()).is_null() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as *mut fn() as *const fn()).cast_mut().is_null() {}
+ //~^ WARN function pointers are not nullable
+ if ((fn_ptr as *mut fn()).cast() as *const fn()).cast_mut().is_null() {}
+ //~^ WARN function pointers are not nullable
+ if (fn_ptr as fn() as *const ()).is_null() {}
+ //~^ WARN function pointers are not nullable
+ if (c_fn as *const fn()).is_null() {}
+ //~^ WARN function pointers are not nullable
+
+ // ---------------- References ------------------
+ if (&mut 8 as *mut i32).is_null() {}
+ //~^ WARN references are not nullable
+ if ptr::from_mut(&mut 8).is_null() {}
+ //~^ WARN references are not nullable
+ if (&8 as *const i32).is_null() {}
+ //~^ WARN references are not nullable
+ if ptr::from_ref(&8).is_null() {}
+ //~^ WARN references are not nullable
+ if ptr::from_ref(&8).cast_mut().is_null() {}
+ //~^ WARN references are not nullable
+ if (ptr::from_ref(&8).cast_mut() as *mut i32).is_null() {}
+ //~^ WARN references are not nullable
+ if (&8 as *const i32) == std::ptr::null() {}
+ //~^ WARN references are not nullable
+ let ref_num = &8;
+ if (ref_num as *const i32) == std::ptr::null() {}
+ //~^ WARN references are not nullable
+ if (b"\0" as *const u8).is_null() {}
+ //~^ WARN references are not nullable
+ if ("aa" as *const str).is_null() {}
+ //~^ WARN references are not nullable
+ if (&[1, 2] as *const i32).is_null() {}
+ //~^ WARN references are not nullable
+ if (&mut [1, 2] as *mut i32) == std::ptr::null_mut() {}
+ //~^ WARN references are not nullable
+ if (static_i32() as *const i32).is_null() {}
+ //~^ WARN references are not nullable
+ if (&*{ static_i32() } as *const i32).is_null() {}
+ //~^ WARN references are not nullable
+
+ // ----------------------------------------------
+ const ZPTR: *const () = 0 as *const _;
+ const NOT_ZPTR: *const () = 1 as *const _;
+
+ // unlike the uplifted clippy::fn_null_check lint we do
+ // not lint on them
+ if (fn_ptr as *const ()) == ZPTR {}
+ if (fn_ptr as *const ()) == NOT_ZPTR {}
+}