about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSydney Acksman <obsidianminor@gmail.com>2019-10-24 09:46:19 -0500
committerSydney Acksman <obsidianminor@gmail.com>2019-10-24 09:47:26 -0500
commit4cfcb770844333a6c7e1ebddc8d30770098bdfd7 (patch)
tree0b0576cc7f13abaa85bfef6ccc7a06efb60ae07a /src
parent4a8c5b20c7772bc5342b83d4b0696ea216ef75a7 (diff)
downloadrust-4cfcb770844333a6c7e1ebddc8d30770098bdfd7.tar.gz
rust-4cfcb770844333a6c7e1ebddc8d30770098bdfd7.zip
Changed APIT with explicit generic args span to specific arg spans
Diffstat (limited to 'src')
-rw-r--r--src/librustc_typeck/astconv.rs21
-rw-r--r--src/test/ui/impl-trait/issues/universal-issue-48703.stderr4
-rw-r--r--src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr6
-rw-r--r--src/test/ui/synthetic-param.stderr12
4 files changed, 29 insertions, 14 deletions
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs
index a052ad95ed5..97f7c6a2c8a 100644
--- a/src/librustc_typeck/astconv.rs
+++ b/src/librustc_typeck/astconv.rs
@@ -215,7 +215,6 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
     /// 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 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
         });
 
         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 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
         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,
diff --git a/src/test/ui/impl-trait/issues/universal-issue-48703.stderr b/src/test/ui/impl-trait/issues/universal-issue-48703.stderr
index a51302dce29..8f05ab3c494 100644
--- a/src/test/ui/impl-trait/issues/universal-issue-48703.stderr
+++ b/src/test/ui/impl-trait/issues/universal-issue-48703.stderr
@@ -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
 
diff --git a/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr b/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr
index f09aa166ef5..c980e9463e4 100644
--- a/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr
+++ b/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr
@@ -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
 
diff --git a/src/test/ui/synthetic-param.stderr b/src/test/ui/synthetic-param.stderr
index f8d14f26f32..951d7edb7f5 100644
--- a/src/test/ui/synthetic-param.stderr
+++ b/src/test/ui/synthetic-param.stderr
@@ -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