Closed as not planned
Description
Code
I tried this code:
use std::collections::BTreeMap;
struct Context<'e> {
_data: &'e [u8],
}
pub struct Rule<'s> {
_rule: Box<dyn for<'e> Fn(&'e Context<'e>) -> bool + Sync + Send + 's>,
}
pub struct Scheme {}
pub struct Parser<'s> {
_scheme: &'s Scheme,
}
impl<'s> Parser<'s> {
pub fn new(_scheme: &'s Scheme) -> Self {
Self { _scheme }
}
}
#[derive(Default)]
pub struct Config<'s> {
_data: BTreeMap<String, Rule<'s>>,
}
impl<'s> Config<'s> {
pub fn update(&mut self, _: Parser<'s>) {}
}
pub fn main() {
let mut configuration = Config::default();
let scheme = Scheme {};
let parser = Parser::new(&scheme);
configuration.update(parser);
}
I expected to see this happen: it compiles successfully
Instead, this happened:
error[[E0597]](https://doc.rust-lang.org/beta/error-index.html#E0597): `scheme` does not live long enough
--> src/main.rs:35:30
|
35 | let parser = Parser::new(&scheme);
| ^^^^^^^ borrowed value does not live long enough
...
38 | }
| -
| |
| `scheme` dropped here while still borrowed
| borrow might be used here, when `configuration` is dropped and runs the destructor for type `Config<'_>`
|
= note: values in a scope are dropped in the opposite order they are defined
For more information about this error, try `rustc --explain E0597`.
Beta: https://play.rust-lang.org/?version=beta&mode=debug&edition=2021&gist=3f293aff3e5dc16ad303940d4613514a
Stable: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=3f293aff3e5dc16ad303940d4613514a
Version it worked on
It most recently worked on: 1.63.0 (but probably before too)
$ rustc --version --verbose
rustc 1.63.0 (4b91a6ea7 2022-08-08)
binary: rustc
commit-hash: 4b91a6ea7258a947e59c6522cd5898e7c0a6a88f
commit-date: 2022-08-08
host: x86_64-unknown-linux-gnu
release: 1.63.0
LLVM version: 14.0.5
Version with regression
rustc --version --verbose
:
$ rustc +beta --version --verbose
rustc 1.64.0-beta.6 (25912c097 2022-09-09)
binary: rustc
commit-hash: 25912c09710a2de2a97b4904e9b528b73439927d
commit-date: 2022-09-09
host: x86_64-unknown-linux-gnu
release: 1.64.0-beta.6
LLVM version: 14.0.6
This might be an acceptable breakage but we faced this regression in production code so I figured it might be worthwhile creating a bug report for this in case it was an unnoticed regression.
@rustbot modify labels: +regression-from-stable-to-beta -regression-untriaged