diff options
Diffstat (limited to 'src/test/ui/builtin-clone-unwind.rs')
| -rw-r--r-- | src/test/ui/builtin-clone-unwind.rs | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/src/test/ui/builtin-clone-unwind.rs b/src/test/ui/builtin-clone-unwind.rs deleted file mode 100644 index 16add6ff2f6..00000000000 --- a/src/test/ui/builtin-clone-unwind.rs +++ /dev/null @@ -1,61 +0,0 @@ -// run-pass -// needs-unwind - -#![allow(unused_variables)] -#![allow(unused_imports)] - -// Test that builtin implementations of `Clone` cleanup everything -// in case of unwinding. - -use std::thread; -use std::rc::Rc; - -struct S(Rc<()>); - -impl Clone for S { - fn clone(&self) -> Self { - if Rc::strong_count(&self.0) == 7 { - panic!("oops"); - } - - S(self.0.clone()) - } -} - -fn main() { - let counter = Rc::new(()); - - // Unwinding with tuples... - let ccounter = counter.clone(); - let result = std::panic::catch_unwind(move || { - let _ = ( - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter) - ).clone(); - }); - - assert!(result.is_err()); - assert_eq!( - 1, - Rc::strong_count(&counter) - ); - - // ... and with arrays. - let ccounter = counter.clone(); - let child = std::panic::catch_unwind(move || { - let _ = [ - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter) - ].clone(); - }); - - assert!(child.is_err()); - assert_eq!( - 1, - Rc::strong_count(&counter) - ); -} |
