-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-lifetimesArea: Lifetimes / regionsArea: Lifetimes / regions
Description
Here is some playpen code: http://is.gd/0HoeAB
Within it, there is the following routine:
fn map_inner<'a, X:'a, Y:'a>(
f: |&X| -> Y,
n: NodeRef<'a, X>,
nodes: &'a TypedArena<Node<Y>>) -> NodeRef<'a, Y> {
match n {
None => None,
Some(ref n) => {
let y = f(&n.data);
Some(nodes.alloc(Node {
data: y,
next: map_inner(f, n.next, nodes)
}))
}
}
}
The signature above has a bug; it omitted a lifetime on the type of nodes
.
The current lifetime suggestion that rustc
produces does not include that though.
The current lifetime suggestion says:
note: consider using an explicit lifetime parameter as shown: fn map_inner<'a, X: 'a,
Y: 'a>(f: |&X| -> Y, n: NodeRef<'a, X>,
nodes: &'a TypedArena<Node<Y>>) -> NodeRef<'a, Y>
when I think it should be:
note: consider using an explicit lifetime parameter as shown: fn map_inner<'a, X: 'a,
Y: 'a>(f: |&X| -> Y, n: NodeRef<'a, X>,
nodes: &'a TypedArena<Node<'a, Y>>) -> NodeRef<'a, Y>
(Note the additional '
ain the type of
nodes`.)
At least, after adding that, the playpen code gets further along in compilation.
(Sorry for not reducing the test case further. Hopefully I will get the chance to do so in the near future.)
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-lifetimesArea: Lifetimes / regionsArea: Lifetimes / regions
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
huonw commentedon Sep 9, 2014
The current suggestion seems to be identical to the code that exists? (Sometimes it doesn't give the full set of annotations immediately, and you have to adjust & recompile a few times to reach the final correct solution, but this doesn't seem to be the case here.)
eefriedman commentedon Jul 1, 2015
This works correctly on current Rust: https://play.rust-lang.org/?gist=266c07479fc9c8d16d38&version=stable .
alexcrichton commentedon Jul 1, 2015
Yay!
Auto merge of rust-lang#17119 - Veykril:linked-rust-files, r=Veykril