]> git.lizzy.rs Git - rust.git/commitdiff
Changed APIT with explicit generic args span to specific arg spans
authorSydney Acksman <obsidianminor@gmail.com>
Thu, 24 Oct 2019 14:46:19 +0000 (09:46 -0500)
committerSydney Acksman <obsidianminor@gmail.com>
Thu, 24 Oct 2019 14:47:26 +0000 (09:47 -0500)
src/librustc_typeck/astconv.rs
src/test/ui/impl-trait/issues/universal-issue-48703.stderr
src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr
src/test/ui/synthetic-param.stderr

index a052ad95ed58a5365a242355b24aa34c1f8bd453..97f7c6a2c8a73b5ec0ed95ed15d7b18cf3513e59 100644 (file)
@@ -215,7 +215,6 @@ pub fn ast_path_substs_for_ty(&self,
     /// Report error if there is an explicit type parameter when using `impl Trait`.
     fn check_impl_trait(
         tcx: TyCtxt<'_>,
-        span: Span,
         seg: &hir::PathSegment,
         generics: &ty::Generics,
     ) -> bool {
@@ -228,14 +227,28 @@ fn check_impl_trait(
         });
 
         if explicit && impl_trait {
+            let spans =
+                seg.generic_args().args
+                    .iter()
+                    .filter_map(|arg|
+                        match arg {
+                            GenericArg::Type(_) => Some(arg.span()),
+                            _ => None
+                        })
+                    .collect::<Vec<_>>();
+
             let mut err = struct_span_err! {
                 tcx.sess,
-                span,
+                spans.clone(),
                 E0632,
                 "cannot provide explicit generic arguments when `impl Trait` is \
-                 used in argument position"
+                used in argument position"
             };
 
+            for span in spans {
+                err.span_label(span, "explicit generic argument not allowed");
+            }
+
             err.emit();
         }
 
@@ -254,7 +267,7 @@ pub fn check_generic_arg_count_for_call(
         let empty_args = P(hir::GenericArgs {
             args: HirVec::new(), bindings: HirVec::new(), parenthesized: false,
         });
-        let suppress_mismatch = Self::check_impl_trait(tcx, span, seg, &def);
+        let suppress_mismatch = Self::check_impl_trait(tcx, seg, &def);
         Self::check_generic_arg_count(
             tcx,
             span,
index a51302dce29660972888582ccd194c7a58c3644a..8f05ab3c4940c30e22f0f170108907dbeb31e65e 100644 (file)
@@ -1,8 +1,8 @@
 error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
-  --> $DIR/universal-issue-48703.rs:8:5
+  --> $DIR/universal-issue-48703.rs:8:11
    |
 LL |     foo::<String>('a');
-   |     ^^^^^^^^^^^^^
+   |           ^^^^^^ explicit generic argument not allowed
 
 error: aborting due to previous error
 
index f09aa166ef508c5b388d70d4c95ae4cd88ab2264..c980e9463e48ae383b377412b67cfaac37976414 100644 (file)
@@ -1,8 +1,10 @@
 error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
-  --> $DIR/universal-turbofish-in-method-issue-50950.rs:14:9
+  --> $DIR/universal-turbofish-in-method-issue-50950.rs:14:24
    |
 LL |     evt.handle_event::<TestEvent, fn(TestEvent)>(|_evt| {
-   |         ^^^^^^^^^^^^
+   |                        ^^^^^^^^^  ^^^^^^^^^^^^^ explicit generic argument not allowed
+   |                        |
+   |                        explicit generic argument not allowed
 
 error: aborting due to previous error
 
index f8d14f26f32de05e92519de00c6e4e36814a1e37..951d7edb7f523ec14cbd3ad24f921b9d963fe8a5 100644 (file)
@@ -1,20 +1,20 @@
 error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
-  --> $DIR/synthetic-param.rs:20:5
+  --> $DIR/synthetic-param.rs:20:12
    |
 LL |     func::<u8>(42);
-   |     ^^^^^^^^^^
+   |            ^^ explicit generic argument not allowed
 
 error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
-  --> $DIR/synthetic-param.rs:23:5
+  --> $DIR/synthetic-param.rs:23:17
    |
 LL |     Foo::func::<u8>(42);
-   |     ^^^^^^^^^^^^^^^
+   |                 ^^ explicit generic argument not allowed
 
 error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
-  --> $DIR/synthetic-param.rs:26:5
+  --> $DIR/synthetic-param.rs:26:23
    |
 LL |     Bar::<i8>::func::<u8>(42);
-   |     ^^^^^^^^^^^^^^^^^^^^^
+   |                       ^^ explicit generic argument not allowed
 
 error: aborting due to 3 previous errors