diff options
Diffstat (limited to 'tests/ui/borrowck/issue-23338-params-outlive-temps-of-body.rs')
-rw-r--r-- | tests/ui/borrowck/issue-23338-params-outlive-temps-of-body.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/ui/borrowck/issue-23338-params-outlive-temps-of-body.rs b/tests/ui/borrowck/issue-23338-params-outlive-temps-of-body.rs new file mode 100644 index 000000000..d45aaa843 --- /dev/null +++ b/tests/ui/borrowck/issue-23338-params-outlive-temps-of-body.rs @@ -0,0 +1,30 @@ +// run-pass +// This is largely checking that we now accept code where temp values +// are borrowing from the input parameters (the `foo` case below). +// +// Compare to run-pass/issue-23338-params-outlive-temps-of-body.rs +// +// (The `foo2` case is just for parity with the above test, which +// shows what happens when you move the `y`-binding to the inside of +// the inner block.) + +use std::cell::RefCell; + +fn foo(x: RefCell<String>) -> String { + x.borrow().clone() +} + +fn foo2(x: RefCell<String>) -> String { + let y = x; + let ret = { + y.borrow().clone() + }; + ret +} + +pub fn main() { + let r = RefCell::new(format!("data")); + assert_eq!(foo(r), "data"); + let r = RefCell::new(format!("data")); + assert_eq!(foo2(r), "data"); +} |