]> git.lizzy.rs Git - rust.git/commitdiff
Add Weak may_dangle tests
authorDavid Tolnay <dtolnay@gmail.com>
Fri, 21 May 2021 02:40:48 +0000 (19:40 -0700)
committerDavid Tolnay <dtolnay@gmail.com>
Fri, 21 May 2021 02:42:29 +0000 (19:42 -0700)
library/alloc/tests/arc.rs
library/alloc/tests/rc.rs

index c02ba267056d6dd391e51cd97bbbdbaf4906302e..ce40b5c9b0a0d3a5948635c131dc1b353adbbcfb 100644 (file)
@@ -195,3 +195,18 @@ fn next(&mut self) -> Option<Self::Item> {
     assert_trusted_len(&iter);
     assert_eq!(&[Box::new(42), Box::new(24)], &*iter.collect::<Rc<[_]>>());
 }
+
+#[test]
+fn weak_may_dangle() {
+    fn hmm<'a>(val: &'a mut Weak<&'a str>) -> Weak<&'a str> {
+        val.clone()
+    }
+
+    // Without #[may_dangle] we get:
+    let mut val = Weak::new();
+    hmm(&mut val);
+    //  ~~~~~~~~ borrowed value does not live long enough
+    //
+    // `val` dropped here while still borrowed
+    // borrow might be used here, when `val` is dropped and runs the `Drop` code for type `std::sync::Weak`
+}
index 501b4f0f816be3f861bf768de3fecc45576875db..efb39a609665b33ad2e6b9b43a75533a98f1feb5 100644 (file)
@@ -191,3 +191,18 @@ fn next(&mut self) -> Option<Self::Item> {
     assert_trusted_len(&iter);
     assert_eq!(&[Box::new(42), Box::new(24)], &*iter.collect::<Rc<[_]>>());
 }
+
+#[test]
+fn weak_may_dangle() {
+    fn hmm<'a>(val: &'a mut Weak<&'a str>) -> Weak<&'a str> {
+        val.clone()
+    }
+
+    // Without #[may_dangle] we get:
+    let mut val = Weak::new();
+    hmm(&mut val);
+    //  ~~~~~~~~ borrowed value does not live long enough
+    //
+    // `val` dropped here while still borrowed
+    // borrow might be used here, when `val` is dropped and runs the `Drop` code for type `std::rc::Weak`
+}