Closed
Listed in
Description
Code
I tried this code:
struct Test {
field: Vec<&'static str>
}
impl Test {
fn field<'field>(&self) -> impl Iterator<Item = &&'field str> {
self.field.iter()
}
}
I expected to see this happen: no compilation error
Instead, this happened:
error: lifetime may not live long enough
--> src/lib.rs:21:9
|
20 | fn field<'field>(&self) -> impl Iterator<Item = &&'field str> {
| ------ - let's call the lifetime of this reference `'1`
| |
| lifetime `'field` defined here
21 | self.field.iter()
| ^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'1` but it is returning data with lifetime `'field`
error: could not compile `playground` (lib) due to 1 previous error
It most recently works on nightly-2024-03-06
but returns error on nightly-2024-03-07
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
lqd commentedon Mar 9, 2024
I believe this should be due to the soundness fix in #121679.
oli-obk commentedon Mar 10, 2024
Yes, that PR was a follow up to #115008 (comment)
Your code example can be used unsoundly, even if a smarter analysis could infer the right lifetimes.
We should have cratered the change and opened a fix PR against your repo, apologies about the unannounced breakage. I'll start a crater run now
oli-obk commentedon Mar 10, 2024
craterbot commentedon Mar 10, 2024
oli-obk commentedon Mar 10, 2024
@craterbot run name=opaque-soundness-fix start=80399064afa4a2cd153f30d02c25f7ea0383ed65 end=09bc67b9158392361780e779d32997f14cc75c39 mode=check-only
craterbot commentedon Mar 10, 2024
👌 Experiment
opaque-soundness-fix
created and queued.🔍 You can check out the queue and this experiment's details.
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more
24 remaining items