about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2016-11-20 15:00:04 +0100
committerGitHub <noreply@github.com>2016-11-20 15:00:04 +0100
commite8673ffa75c302365a2646e93327416fe342f2ab (patch)
tree53df9390931cb7a76d6b62d093cd8efc2883170e
parent224f2cec9cfe1b735b6b1d9a77959aaa7e66af92 (diff)
parent92abce2addffb8394406fda764e83e81ebd29d08 (diff)
downloadrust-e8673ffa75c302365a2646e93327416fe342f2ab.tar.gz
rust-e8673ffa75c302365a2646e93327416fe342f2ab.zip
Rollup merge of #37835 - ojsheikh:E0088, r=jonathandturner
Update E0088 to new error format

Fixes #35226 which is part of #35233. Is based on #36208 from @yossi-k.

r? @jonathandturner
-rw-r--r--src/librustc_typeck/check/mod.rs23
-rw-r--r--src/test/compile-fail/E0088.rs5
2 files changed, 17 insertions, 11 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index f08178e49fb..093a023291a 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -4436,19 +4436,20 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
         let lifetime_defs = segment.map_or(&[][..], |(_, generics)| &generics.regions);
         if lifetimes.len() > lifetime_defs.len() {
             let span = lifetimes[lifetime_defs.len()].span;
-            span_err!(self.tcx.sess, span, E0088,
-                      "too many lifetime parameters provided: \
-                       expected {}, found {}",
-                      count(lifetime_defs.len()),
-                      count(lifetimes.len()));
-        } else if lifetimes.len() > 0 && lifetimes.len() < lifetime_defs.len() {
-            span_err!(self.tcx.sess, span, E0090,
-                      "too few lifetime parameters provided: \
-                       expected {}, found {}",
-                      count(lifetime_defs.len()),
-                      count(lifetimes.len()));
+            struct_span_err!(self.tcx.sess, span, E0088,
+                             "too many lifetime parameters provided: \
+                              expected {}, found {}",
+                              count(lifetime_defs.len()),
+                              count(lifetimes.len()))
+                .span_label(span, &format!("unexpected lifetime parameter{}",
+                                           match lifetimes.len() { 1 => "", _ => "s" }))
+                .emit();
         }
 
+        // The case where there is not enough lifetime parameters is not checked,
+        // because this is not possible - a function never takes lifetime parameters.
+        // See discussion for Pull Request 36208.
+
         // Check provided type parameters.
         let type_defs = segment.map_or(&[][..], |(_, generics)| {
             if generics.parent.is_none() {
diff --git a/src/test/compile-fail/E0088.rs b/src/test/compile-fail/E0088.rs
index 0b235aa240c..9ec09603224 100644
--- a/src/test/compile-fail/E0088.rs
+++ b/src/test/compile-fail/E0088.rs
@@ -9,7 +9,12 @@
 // except according to those terms.
 
 fn f() {}
+fn g<'a>() {}
 
 fn main() {
     f::<'static>(); //~ ERROR E0088
+    //~^ unexpected lifetime parameter
+
+    g::<'static, 'static>(); //~ ERROR E0088
+    //~^ unexpected lifetime parameters
 }