Skip to content

Commit

Permalink
Fix span for closure return type when annotated.
Browse files Browse the repository at this point in the history
This commit adjusts the span used to label closure return types so that
if the user specifies the return type, i.e. `|_| -> X {}` instead of
`|_| {}`, we correctly highlight all of it and not just the last
character.
  • Loading branch information
davidtwco committed Feb 5, 2019
1 parent 8ae730a commit b377d0b
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
Expand Up @@ -681,10 +681,13 @@ impl<'tcx> RegionInferenceContext<'tcx> {

let (return_span, mir_description) = match tcx.hir().get(mir_node_id) {
hir::Node::Expr(hir::Expr {
node: hir::ExprKind::Closure(_, _, _, span, gen_move),
node: hir::ExprKind::Closure(_, return_ty, _, span, gen_move),
..
}) => (
tcx.sess.source_map().end_point(*span),
match return_ty.output {
hir::FunctionRetTy::DefaultReturn(_) => tcx.sess.source_map().end_point(*span),
hir::FunctionRetTy::Return(_) => return_ty.output.span(),
},
if gen_move.is_some() {
" of generator"
} else {
Expand Down
14 changes: 14 additions & 0 deletions src/test/ui/nll/issue-58053.rs
@@ -0,0 +1,14 @@
#![allow(warnings)]
#![feature(nll)]

fn main() {
let i = &3;

let f = |x: &i32| -> &i32 { x };
//~^ ERROR lifetime may not live long enough
let j = f(i);

let g = |x: &i32| { x };
//~^ ERROR lifetime may not live long enough
let k = g(i);
}
20 changes: 20 additions & 0 deletions src/test/ui/nll/issue-58053.stderr
@@ -0,0 +1,20 @@
error: lifetime may not live long enough
--> $DIR/issue-58053.rs:7:33
|
LL | let f = |x: &i32| -> &i32 { x };
| - ---- ^ returning this value requires that `'1` must outlive `'2`
| | |
| | return type of closure is &'2 i32
| let's call the lifetime of this reference `'1`

error: lifetime may not live long enough
--> $DIR/issue-58053.rs:11:25
|
LL | let g = |x: &i32| { x };
| - - ^ returning this value requires that `'1` must outlive `'2`
| | |
| | return type of closure is &'2 i32
| let's call the lifetime of this reference `'1`

error: aborting due to 2 previous errors

0 comments on commit b377d0b

Please sign in to comment.