about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeSeulArtichaut <leseulartichaut@gmail.com>2020-05-14 20:37:23 +0200
committerLeSeulArtichaut <leseulartichaut@gmail.com>2020-05-27 20:37:57 +0200
commit3ce9d5c26982ff0516946dda7fa8d29580fa25b3 (patch)
treea94d1170a1e65a5d16f0f972100cd27f65d49ee7
parentbb6791502846b62e752c99396953e4db7739f28c (diff)
downloadrust-3ce9d5c26982ff0516946dda7fa8d29580fa25b3.tar.gz
rust-3ce9d5c26982ff0516946dda7fa8d29580fa25b3.zip
Add more cases to the test
-rw-r--r--src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs b/src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs
index 7feb68b9857..618c9115815 100644
--- a/src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs
+++ b/src/test/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.rs
@@ -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