]> git.lizzy.rs Git - rust.git/commitdiff
Add more cases to the test
authorLeSeulArtichaut <leseulartichaut@gmail.com>
Thu, 14 May 2020 18:37:23 +0000 (20:37 +0200)
committerLeSeulArtichaut <leseulartichaut@gmail.com>
Wed, 27 May 2020 18:37:57 +0000 (20:37 +0200)
src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs

index 7feb68b98577f1e271ead2d54a16b3b4ee5ea853..618c911581597c16fa85a068ff114a286ae7ab0c 100644 (file)
@@ -1,16 +1,38 @@
 #![feature(unsafe_block_in_unsafe_fn)]
 #![warn(unsafe_op_in_unsafe_fn)]
 #![deny(unused_unsafe)]
+#![deny(safe_packed_borrows)]
 
 unsafe fn unsf() {}
+const PTR: *const () = std::ptr::null();
+static mut VOID: () = ();
+
+#[repr(packed)]
+pub struct Packed {
+    data: &'static u32,
+}
+
+const PACKED: Packed = Packed { data: &0 };
 
 unsafe fn foo() {
     unsf();
     //~^ WARNING call to unsafe function is unsafe and requires unsafe block
+    *PTR;
+    //~^ WARNING dereference of raw pointer is unsafe and requires unsafe block
+    VOID = ();
+    //~^ WARNING use of mutable static is unsafe and requires unsafe block
+    &PACKED.data; // the level for the `safe_packed_borrows` lint is ignored
+    //~^ WARNING borrow of packed field is unsafe and requires unsafe block
 }
 
 unsafe fn bar() {
-    unsafe { unsf() } // no error
+    // no error
+    unsafe {
+        unsf();
+        *PTR;
+        VOID = ();
+        &PACKED.data;
+    }
 }
 
 unsafe fn baz() {
@@ -20,7 +42,11 @@ unsafe fn baz() {
 
 #[allow(unsafe_op_in_unsafe_fn)]
 unsafe fn qux() {
-    unsf(); // no error
+    // lint allowed -> no error
+    unsf();
+    *PTR;
+    VOID = ();
+    &PACKED.data;
 
     unsafe { unsf() }
     //~^ ERROR unnecessary `unsafe` block