mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Rollup merge of #100155 - compiler-errors:issue-100154, r=jackh726
Use `node_type_opt` to skip over generics that were not expected Fixes #100154
This commit is contained in:
@@ -1761,13 +1761,13 @@ fn point_at_type_arg_instead_of_call_if_possible(
|
||||
.filter_map(|seg| seg.args.as_ref())
|
||||
.flat_map(|a| a.args.iter())
|
||||
{
|
||||
if let hir::GenericArg::Type(hir_ty) = &arg {
|
||||
let ty = self.resolve_vars_if_possible(
|
||||
self.typeck_results.borrow().node_type(hir_ty.hir_id),
|
||||
);
|
||||
if ty == predicate.self_ty() {
|
||||
error.obligation.cause.span = hir_ty.span;
|
||||
}
|
||||
if let hir::GenericArg::Type(hir_ty) = &arg
|
||||
&& let Some(ty) =
|
||||
self.typeck_results.borrow().node_type_opt(hir_ty.hir_id)
|
||||
&& self.resolve_vars_if_possible(ty) == predicate.self_ty()
|
||||
{
|
||||
error.obligation.cause.span = hir_ty.span;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fn foo(i: impl std::fmt::Display) {}
|
||||
|
||||
fn main() {
|
||||
foo::<()>(());
|
||||
//~^ ERROR this function takes 0 generic arguments but 1 generic argument was supplied
|
||||
//~| ERROR `()` doesn't implement `std::fmt::Display`
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
error[E0107]: this function takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/issue-100154.rs:4:5
|
||||
|
|
||||
LL | foo::<()>(());
|
||||
| ^^^------ help: remove these generics
|
||||
| |
|
||||
| expected 0 generic arguments
|
||||
|
|
||||
note: function defined here, with 0 generic parameters
|
||||
--> $DIR/issue-100154.rs:1:4
|
||||
|
|
||||
LL | fn foo(i: impl std::fmt::Display) {}
|
||||
| ^^^
|
||||
= note: `impl Trait` cannot be explicitly specified as a generic argument
|
||||
|
||||
error[E0277]: `()` doesn't implement `std::fmt::Display`
|
||||
--> $DIR/issue-100154.rs:4:15
|
||||
|
|
||||
LL | foo::<()>(());
|
||||
| --------- ^^ `()` cannot be formatted with the default formatter
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: the trait `std::fmt::Display` is not implemented for `()`
|
||||
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-100154.rs:1:16
|
||||
|
|
||||
LL | fn foo(i: impl std::fmt::Display) {}
|
||||
| ^^^^^^^^^^^^^^^^^ required by this bound in `foo`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0277.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
@@ -1,8 +1,8 @@
|
||||
error[E0277]: `&'static Unit` cannot be safely transmuted into `&'static Unit` in the defining scope of `assert::Context`.
|
||||
--> $DIR/references.rs:19:52
|
||||
--> $DIR/references.rs:19:37
|
||||
|
|
||||
LL | assert::is_maybe_transmutable::<&'static Unit, &'static Unit>();
|
||||
| ^^^^^^^^^^^^^ `&'static Unit` cannot be safely transmuted into `&'static Unit` in the defining scope of `assert::Context`.
|
||||
| ^^^^^^^^^^^^^ `&'static Unit` cannot be safely transmuted into `&'static Unit` in the defining scope of `assert::Context`.
|
||||
|
|
||||
= help: the trait `BikeshedIntrinsicFrom<&'static Unit, assert::Context, true, true, true, true>` is not implemented for `&'static Unit`
|
||||
note: required by a bound in `is_maybe_transmutable`
|
||||
|
||||
Reference in New Issue
Block a user