about summary refs log tree commit diff
path: root/tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs')
-rw-r--r--tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs b/tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs
new file mode 100644
index 00000000000..ac1cfd62a05
--- /dev/null
+++ b/tests/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs
@@ -0,0 +1,28 @@
+// revisions: mir thir
+// [thir]compile-flags: -Zthir-unsafeck
+
+#[deny(unused_unsafe)]
+fn main() {
+    let mut v = Vec::<i32>::with_capacity(24);
+
+    unsafe {
+        let f = |v: &mut Vec<_>| {
+            unsafe { //~ ERROR unnecessary `unsafe`
+                v.set_len(24);
+                |w: &mut Vec<u32>| { unsafe { //~ ERROR unnecessary `unsafe`
+                    w.set_len(32);
+                } };
+            }
+            |x: &mut Vec<u32>| { unsafe { //~ ERROR unnecessary `unsafe`
+                x.set_len(40);
+            } };
+        };
+
+        v.set_len(0);
+        f(&mut v);
+    }
+
+    |y: &mut Vec<u32>| { unsafe {
+        y.set_len(48);
+    } };
+}