Remove impl_trait_in_bindings handling on inference error reporting
This commit is contained in:
parent
4d2d90307d
commit
962ac8183d
4 changed files with 2 additions and 120 deletions
|
@ -491,11 +491,8 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||||
span
|
span
|
||||||
};
|
};
|
||||||
|
|
||||||
let is_named_and_not_impl_trait = |ty: Ty<'_>| {
|
let is_named_and_not_impl_trait =
|
||||||
&ty.to_string() != "_" &&
|
|ty: Ty<'_>| &ty.to_string() != "_" && !ty.is_impl_trait();
|
||||||
// FIXME: Remove this check after `impl_trait_in_bindings` is stabilized. #63527
|
|
||||||
(!ty.is_impl_trait() || self.tcx.features().impl_trait_in_bindings)
|
|
||||||
};
|
|
||||||
|
|
||||||
let ty_msg = match (local_visitor.found_node_ty, local_visitor.found_exact_method_call) {
|
let ty_msg = match (local_visitor.found_node_ty, local_visitor.found_exact_method_call) {
|
||||||
(_, Some(_)) => String::new(),
|
(_, Some(_)) => String::new(),
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
error[E0435]: attempt to use a non-constant value in a constant
|
|
||||||
--> $DIR/bindings.rs:5:29
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| --------- ^ non-constant value
|
|
||||||
| |
|
|
||||||
| help: consider using `let` instead of `const`: `let foo`
|
|
||||||
|
|
||||||
error[E0435]: attempt to use a non-constant value in a constant
|
|
||||||
--> $DIR/bindings.rs:11:33
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| --------- ^ non-constant value
|
|
||||||
| |
|
|
||||||
| help: consider using `let` instead of `const`: `let foo`
|
|
||||||
|
|
||||||
error[E0435]: attempt to use a non-constant value in a constant
|
|
||||||
--> $DIR/bindings.rs:18:33
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| --------- ^ non-constant value
|
|
||||||
| |
|
|
||||||
| help: consider using `let` instead of `const`: `let foo`
|
|
||||||
|
|
||||||
error[E0435]: attempt to use a non-constant value in a constant
|
|
||||||
--> $DIR/bindings.rs:25:33
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| --------- ^ non-constant value
|
|
||||||
| |
|
|
||||||
| help: consider using `let` instead of `const`: `let foo`
|
|
||||||
|
|
||||||
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
|
|
||||||
--> $DIR/bindings.rs:5:16
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
|
|
||||||
|
|
||||||
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
|
|
||||||
--> $DIR/bindings.rs:11:20
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
|
|
||||||
|
|
||||||
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
|
|
||||||
--> $DIR/bindings.rs:18:20
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
|
|
||||||
|
|
||||||
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
|
|
||||||
--> $DIR/bindings.rs:25:20
|
|
||||||
|
|
|
||||||
LL | const foo: impl Clone = x;
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
|
|
||||||
|
|
||||||
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/bindings.rs:1:12
|
|
||||||
|
|
|
||||||
LL | #![feature(impl_trait_in_bindings)]
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
|
|
||||||
|
|
||||||
error: aborting due to 8 previous errors; 1 warning emitted
|
|
||||||
|
|
||||||
Some errors have detailed explanations: E0435, E0562.
|
|
||||||
For more information about an error, try `rustc --explain E0435`.
|
|
|
@ -1,17 +0,0 @@
|
||||||
// edition:2018
|
|
||||||
#![feature(impl_trait_in_bindings)]
|
|
||||||
//~^ WARN the feature `impl_trait_in_bindings` is incomplete
|
|
||||||
|
|
||||||
use std::io::Error;
|
|
||||||
|
|
||||||
fn make_unit() -> Result<(), Error> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let fut = async {
|
|
||||||
make_unit()?;
|
|
||||||
|
|
||||||
Ok(()) //~ ERROR type annotations needed
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:2:12
|
|
||||||
|
|
|
||||||
LL | #![feature(impl_trait_in_bindings)]
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
|
|
||||||
|
|
||||||
error[E0282]: type annotations needed for `impl Future`
|
|
||||||
--> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:15:9
|
|
||||||
|
|
|
||||||
LL | let fut = async {
|
|
||||||
| --- consider giving `fut` the explicit type `impl Future`, where the type parameter `E` is specified
|
|
||||||
...
|
|
||||||
LL | Ok(())
|
|
||||||
| ^^ cannot infer type for type parameter `E` declared on the enum `Result`
|
|
||||||
|
|
||||||
error: aborting due to previous error; 1 warning emitted
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0282`.
|
|
Loading…
Add table
Add a link
Reference in a new issue