Skip to content

Commit abb8576

Browse files
author
Yossi Konstantinovsky
committed
Update E0088 to new format, remove E0090
1 parent 13c4e32 commit abb8576

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

src/librustc_typeck/check/mod.rs

+19-12
Original file line numberDiff line numberDiff line change
@@ -4324,20 +4324,27 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
43244324
// Check provided lifetime parameters.
43254325
let lifetime_defs = segment.map_or(&[][..], |(_, generics)| &generics.regions);
43264326
if lifetimes.len() > lifetime_defs.len() {
4327-
let span = lifetimes[lifetime_defs.len()].span;
4328-
span_err!(self.tcx.sess, span, E0088,
4329-
"too many lifetime parameters provided: \
4330-
expected {}, found {}",
4331-
count(lifetime_defs.len()),
4332-
count(lifetimes.len()));
4333-
} else if lifetimes.len() > 0 && lifetimes.len() < lifetime_defs.len() {
4334-
span_err!(self.tcx.sess, span, E0090,
4335-
"too few lifetime parameters provided: \
4336-
expected {}, found {}",
4337-
count(lifetime_defs.len()),
4338-
count(lifetimes.len()));
4327+
let span = lifetimes[..].into_iter().skip(1).map(|lft| lft.span)
4328+
.fold(lifetimes[0].span, |acc, n| Span {
4329+
expn_id: acc.expn_id,
4330+
lo: acc.lo,
4331+
hi: n.hi,
4332+
});
4333+
4334+
struct_span_err!(self.tcx.sess, span, E0088,
4335+
"too many lifetime parameters provided: \
4336+
expected {}, found {}",
4337+
count(lifetime_defs.len()),
4338+
count(lifetimes.len()))
4339+
.span_label(span, &format!("unexpected lifetime parameter{}",
4340+
match lifetimes.len() { 1 => "", _ => "s" }))
4341+
.emit();
43394342
}
43404343

4344+
// The case where there is not enough lifetime parameters is not checked,
4345+
// because this is not possible - a function never takes lifetime parameters.
4346+
// See discussion for Pull Request 36208.
4347+
43414348
// Check provided type parameters.
43424349
let type_defs = segment.map_or(&[][..], |(_, generics)| {
43434350
if generics.parent.is_none() {

src/test/compile-fail/E0088.rs

+5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
// except according to those terms.
1010

1111
fn f() {}
12+
fn g<'a>() {}
1213

1314
fn main() {
1415
f::<'static>(); //~ ERROR E0088
16+
//~^ unexpected lifetime parameter
17+
18+
g::<'static, 'static>(); //~ ERROR E0088
19+
//~^ unexpected lifetime parameters
1520
}

0 commit comments

Comments
 (0)