Skip to content

Commit 96b549a

Browse files
Yossi Konstantinovskyojsheikh
Yossi Konstantinovsky
authored andcommitted
Update E0088 to new format, remove E0090
1 parent 87b76a5 commit 96b549a

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
@@ -4412,20 +4412,27 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
44124412
// Check provided lifetime parameters.
44134413
let lifetime_defs = segment.map_or(&[][..], |(_, generics)| &generics.regions);
44144414
if lifetimes.len() > lifetime_defs.len() {
4415-
let span = lifetimes[lifetime_defs.len()].span;
4416-
span_err!(self.tcx.sess, span, E0088,
4417-
"too many lifetime parameters provided: \
4418-
expected {}, found {}",
4419-
count(lifetime_defs.len()),
4420-
count(lifetimes.len()));
4421-
} else if lifetimes.len() > 0 && lifetimes.len() < lifetime_defs.len() {
4422-
span_err!(self.tcx.sess, span, E0090,
4423-
"too few lifetime parameters provided: \
4424-
expected {}, found {}",
4425-
count(lifetime_defs.len()),
4426-
count(lifetimes.len()));
4415+
let span = lifetimes[..].into_iter().skip(1).map(|lft| lft.span)
4416+
.fold(lifetimes[0].span, |acc, n| Span {
4417+
expn_id: acc.expn_id,
4418+
lo: acc.lo,
4419+
hi: n.hi,
4420+
});
4421+
4422+
struct_span_err!(self.tcx.sess, span, E0088,
4423+
"too many lifetime parameters provided: \
4424+
expected {}, found {}",
4425+
count(lifetime_defs.len()),
4426+
count(lifetimes.len()))
4427+
.span_label(span, &format!("unexpected lifetime parameter{}",
4428+
match lifetimes.len() { 1 => "", _ => "s" }))
4429+
.emit();
44274430
}
44284431

4432+
// The case where there is not enough lifetime parameters is not checked,
4433+
// because this is not possible - a function never takes lifetime parameters.
4434+
// See discussion for Pull Request 36208.
4435+
44294436
// Check provided type parameters.
44304437
let type_defs = segment.map_or(&[][..], |(_, generics)| {
44314438
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)