summaryrefslogtreecommitdiffstats
path: root/src/test/ui/regions/region-borrow-params-issue-29793-big.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/regions/region-borrow-params-issue-29793-big.rs')
-rw-r--r--src/test/ui/regions/region-borrow-params-issue-29793-big.rs74
1 files changed, 0 insertions, 74 deletions
diff --git a/src/test/ui/regions/region-borrow-params-issue-29793-big.rs b/src/test/ui/regions/region-borrow-params-issue-29793-big.rs
deleted file mode 100644
index 83b1a6eab..000000000
--- a/src/test/ui/regions/region-borrow-params-issue-29793-big.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Issue #29793, big regression test: do not let borrows of
-// parameters to ever be returned (expanded with exploration of
-// variations).
-//
-// This is the version of the test that actually exposed unsound
-// behavior (because the improperly accepted closure was actually
-// able to be invoked).
-
-struct WrapA<F>(Option<F>);
-
-impl<F> WrapA<F> {
- fn new() -> WrapA<F> {
- WrapA(None)
- }
- fn set(mut self, f: F) -> Self {
- self.0 = Some(f);
- self
- }
-}
-
-struct WrapB<F>(Option<F>);
-
-impl<F> WrapB<F> {
- fn new() -> WrapB<F> {
- WrapB(None)
- }
- fn set(mut self, f: F) -> Self {
- self.0 = Some(f);
- self
- }
-}
-
-trait DoStuff : Sized {
- fn handle(self);
-}
-
-impl<F, T> DoStuff for WrapA<F>
- where F: FnMut(usize, usize) -> T, T: DoStuff {
- fn handle(mut self) {
- if let Some(ref mut f) = self.0 {
- let x = f(1, 2);
- let _foo = [0usize; 16];
- x.handle();
- }
- }
- }
-
-impl<F> DoStuff for WrapB<F> where F: FnMut(bool) -> usize {
- fn handle(mut self) {
- if let Some(ref mut f) = self.0 {
- println!("{}", f(true));
- }
- }
-}
-
-impl<F, T> WrapA<F>
- where F: FnMut(usize, usize) -> T, T: DoStuff {
- fn handle_ref(&mut self) {
- if let Some(ref mut f) = self.0 {
- let x = f(1, 2);
- }
- }
- }
-
-fn main() {
- let mut w = WrapA::new().set(|x: usize, y: usize| {
- WrapB::new().set(|t: bool| if t { x } else { y }) // (separate errors for `x` vs `y`)
- //~^ ERROR closure may outlive the current function
- //~| ERROR closure may outlive the current function
- });
-
- w.handle(); // This works
- // w.handle_ref(); // This doesn't
-}