mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
Keep error types around, even in obligations.
These help silence follow up errors
This commit is contained in:
parent
3a6bf351a3
commit
fb44c848c3
@ -631,13 +631,6 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||
ct_op: |ct| ct,
|
||||
});
|
||||
|
||||
if let ty::ClauseKind::Projection(projection) = predicate.kind().skip_binder() {
|
||||
if projection.term.references_error() {
|
||||
// No point on adding any obligations since there's a type error involved.
|
||||
obligations.clear();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Require that the predicate holds for the concrete type.
|
||||
debug!(?predicate);
|
||||
obligations.push(traits::Obligation::new(
|
||||
|
@ -5,7 +5,7 @@
|
||||
async fn copy() -> Result<()>
|
||||
//~^ ERROR enum takes 2 generic arguments
|
||||
{
|
||||
Ok(()) //~ ERROR: type annotations needed
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
fn main() {}
|
||||
|
@ -11,18 +11,6 @@ help: add missing generic argument
|
||||
LL | async fn copy() -> Result<(), E>
|
||||
| +++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/issue-65159.rs:8:5
|
||||
|
|
||||
LL | Ok(())
|
||||
| ^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
||||
|
|
||||
help: consider specifying the generic arguments
|
||||
|
|
||||
LL | Ok::<(), E>(())
|
||||
| +++++++++
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0282.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
For more information about this error, try `rustc --explain E0107`.
|
||||
|
@ -17,7 +17,6 @@ async fn buy_lock(coroutine: &Mutex<MarketMultiplier>) -> LockedMarket<'_> {
|
||||
//~^ ERROR struct takes 0 lifetime arguments but 1 lifetime argument was supplied
|
||||
//~^^ ERROR struct takes 1 generic argument but 0 generic arguments were supplied
|
||||
LockedMarket(coroutine.lock().unwrap().buy())
|
||||
//~^ ERROR: cannot return value referencing temporary value
|
||||
}
|
||||
|
||||
struct LockedMarket<T>(T);
|
||||
|
@ -7,7 +7,7 @@ LL | async fn buy_lock(coroutine: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
||||
| expected 0 lifetime arguments
|
||||
|
|
||||
note: struct defined here, with 0 lifetime parameters
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
|
||||
|
|
||||
LL | struct LockedMarket<T>(T);
|
||||
| ^^^^^^^^^^^^
|
||||
@ -19,7 +19,7 @@ LL | async fn buy_lock(coroutine: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
||||
| ^^^^^^^^^^^^ expected 1 generic argument
|
||||
|
|
||||
note: struct defined here, with 1 generic parameter: `T`
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
|
||||
|
|
||||
LL | struct LockedMarket<T>(T);
|
||||
| ^^^^^^^^^^^^ -
|
||||
@ -28,16 +28,6 @@ help: add missing generic argument
|
||||
LL | async fn buy_lock(coroutine: &Mutex<MarketMultiplier>) -> LockedMarket<'_, T> {
|
||||
| +++
|
||||
|
||||
error[E0515]: cannot return value referencing temporary value
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:19:5
|
||||
|
|
||||
LL | LockedMarket(coroutine.lock().unwrap().buy())
|
||||
| ^^^^^^^^^^^^^-------------------------^^^^^^^
|
||||
| | |
|
||||
| | temporary value created here
|
||||
| returns a value referencing data owned by the current function
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0515.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
For more information about this error, try `rustc --explain E0107`.
|
||||
|
@ -15,6 +15,7 @@ fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator<Item = Lint>
|
||||
|
||||
fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
||||
//~^ ERROR: failed to resolve
|
||||
//~| ERROR: `()` is not an iterator
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
error[E0277]: `()` is not an iterator
|
||||
--> $DIR/issue-72911.rs:16:20
|
||||
|
|
||||
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `()` is not an iterator
|
||||
|
|
||||
= help: the trait `Iterator` is not implemented for `()`
|
||||
|
||||
error[E0433]: failed to resolve: use of undeclared crate or module `foo`
|
||||
--> $DIR/issue-72911.rs:11:33
|
||||
|
|
||||
@ -10,6 +18,7 @@ error[E0433]: failed to resolve: use of undeclared crate or module `foo`
|
||||
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
||||
| ^^^ use of undeclared crate or module `foo`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0433`.
|
||||
Some errors have detailed explanations: E0277, E0433.
|
||||
For more information about an error, try `rustc --explain E0277`.
|
||||
|
@ -5,7 +5,6 @@ use std::iter;
|
||||
fn f<T>(data: &[T]) -> impl Iterator<Item = Vec> {
|
||||
//~^ ERROR: missing generics for struct `Vec` [E0107]
|
||||
iter::empty()
|
||||
//~^ ERROR: type annotations needed
|
||||
}
|
||||
|
||||
fn g<T>(data: &[T], target: T) -> impl Iterator<Item = Vec<T>> {
|
||||
|
@ -9,18 +9,6 @@ help: add missing generic argument
|
||||
LL | fn f<T>(data: &[T]) -> impl Iterator<Item = Vec<T>> {
|
||||
| +++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/issue-92305.rs:7:5
|
||||
|
|
||||
LL | iter::empty()
|
||||
| ^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the function `empty`
|
||||
|
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | iter::empty::<T>()
|
||||
| +++++
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0282.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
For more information about this error, try `rustc --explain E0107`.
|
||||
|
Loading…
Reference in New Issue
Block a user