/// 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 {
});
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();
}
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,
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
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
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