Skip to content

lifetime param suggestion misses an inner 'a #17119

@pnkfelix

Description

@pnkfelix
Member

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 ofnodes`.)

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.)

Activity

huonw

huonw commented on Sep 9, 2014

@huonw
Member

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.)

added
A-diagnosticsArea: Messages for errors, warnings, and lints
A-lifetimesArea: Lifetimes / regions
on Sep 9, 2014
eefriedman

eefriedman commented on Jul 1, 2015

@eefriedman
Contributor
alexcrichton

alexcrichton commented on Jul 1, 2015

@alexcrichton
Member

Yay!

added a commit that references this issue on Apr 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-lifetimesArea: Lifetimes / regions

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @alexcrichton@pnkfelix@huonw@eefriedman

        Issue actions

          lifetime param suggestion misses an inner 'a · Issue #17119 · rust-lang/rust