add tests

This commit is contained in:
lcnr 2023-05-29 17:20:42 +02:00
parent cfd0623411
commit b5732508dd
4 changed files with 78 additions and 0 deletions

View file

@ -0,0 +1,18 @@
// edition:2021
// regression test for #112056
fn extend_lifetime<'a, 'b>(x: &mut (&'a str,), y: &'b str) {
let mut closure = |input| x.0 = input;
//~^ ERROR: lifetime may not live long enough
closure(y);
}
fn main() {
let mut tuple = ("static",);
{
let x = String::from("temporary");
extend_lifetime(&mut tuple, &x);
}
println!("{}", tuple.0);
}

View file

@ -0,0 +1,14 @@
error: lifetime may not live long enough
--> $DIR/unique-borrows-are-invariant-1.rs:6:31
|
LL | fn extend_lifetime<'a, 'b>(x: &mut (&'a str,), y: &'b str) {
| -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
LL | let mut closure = |input| x.0 = input;
| ^^^^^^^^^^^ assignment requires that `'b` must outlive `'a`
|
= help: consider adding the following bound: `'b: 'a`
error: aborting due to previous error

View file

@ -0,0 +1,31 @@
// edition:2021
// regression test for #112056
struct Spooky<'b> {
owned: Option<&'static u32>,
borrowed: &'b &'static u32,
}
impl<'b> Spooky<'b> {
fn create_self_reference<'a>(&'a mut self) {
let mut closure = || {
if let Some(owned) = &self.owned {
let borrow: &'a &'static u32 = owned;
self.borrowed = borrow;
//~^ ERROR: lifetime may not live long enough
}
};
closure();
}
}
fn main() {
let mut spooky: Spooky<'static> = Spooky {
owned: Some(&1),
borrowed: &&1,
};
spooky.create_self_reference();
spooky.owned = None;
println!("{}", **spooky.borrowed);
}

View file

@ -0,0 +1,15 @@
error: lifetime may not live long enough
--> $DIR/unique-borrows-are-invariant-2.rs:15:17
|
LL | impl<'b> Spooky<'b> {
| -- lifetime `'b` defined here
LL | fn create_self_reference<'a>(&'a mut self) {
| -- lifetime `'a` defined here
...
LL | self.borrowed = borrow;
| ^^^^^^^^^^^^^^^^^^^^^^ assignment requires that `'a` must outlive `'b`
|
= help: consider adding the following bound: `'a: 'b`
error: aborting due to previous error