Use ty::Error
for opaque types with errors in its bounds.
This reduces unhelpful diagnostics down the road.
This commit is contained in:
parent
34de78fd81
commit
b952ada0ae
7 changed files with 10 additions and 38 deletions
|
@ -1022,7 +1022,7 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
|
||||||
if let ty::PredicateKind::Projection(projection) = predicate.kind().skip_binder() {
|
if let ty::PredicateKind::Projection(projection) = predicate.kind().skip_binder() {
|
||||||
if projection.ty.references_error() {
|
if projection.ty.references_error() {
|
||||||
// No point on adding these obligations since there's a type error involved.
|
// No point on adding these obligations since there's a type error involved.
|
||||||
return ty_var;
|
return tcx.ty_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Change the predicate to refer to the type variable,
|
// Change the predicate to refer to the type variable,
|
||||||
|
|
|
@ -6,7 +6,6 @@ async fn copy() -> Result<()>
|
||||||
//~^ ERROR this enum takes 2 generic arguments
|
//~^ ERROR this enum takes 2 generic arguments
|
||||||
{
|
{
|
||||||
Ok(())
|
Ok(())
|
||||||
//~^ ERROR type annotations needed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() { }
|
fn main() { }
|
||||||
|
|
|
@ -16,13 +16,6 @@ help: add missing generic argument
|
||||||
LL | async fn copy() -> Result<(), E>
|
LL | async fn copy() -> Result<(), E>
|
||||||
| +++
|
| +++
|
||||||
|
|
||||||
error[E0282]: type annotations needed
|
error: aborting due to previous error
|
||||||
--> $DIR/issue-65159.rs:8:5
|
|
||||||
|
|
|
||||||
LL | Ok(())
|
|
||||||
| ^^ cannot infer type for type parameter `E` declared on the enum `Result`
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
For more information about this error, try `rustc --explain E0107`.
|
||||||
|
|
||||||
Some errors have detailed explanations: E0107, E0282.
|
|
||||||
For more information about an error, try `rustc --explain E0107`.
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_> {
|
||||||
//~^ ERROR this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
|
//~^ ERROR this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
|
||||||
//~^^ ERROR this struct takes 1 generic argument but 0 generic arguments were supplied
|
//~^^ ERROR this struct takes 1 generic argument but 0 generic arguments were supplied
|
||||||
LockedMarket(generator.lock().unwrap().buy())
|
LockedMarket(generator.lock().unwrap().buy())
|
||||||
//~^ ERROR cannot return value referencing temporary value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LockedMarket<T>(T);
|
struct LockedMarket<T>(T);
|
||||||
|
|
|
@ -7,7 +7,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
||||||
| expected 0 lifetime arguments
|
| expected 0 lifetime arguments
|
||||||
|
|
|
|
||||||
note: struct defined here, with 0 lifetime parameters
|
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);
|
LL | struct LockedMarket<T>(T);
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
@ -19,7 +19,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
||||||
| ^^^^^^^^^^^^ expected 1 generic argument
|
| ^^^^^^^^^^^^ expected 1 generic argument
|
||||||
|
|
|
|
||||||
note: struct defined here, with 1 generic parameter: `T`
|
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);
|
LL | struct LockedMarket<T>(T);
|
||||||
| ^^^^^^^^^^^^ -
|
| ^^^^^^^^^^^^ -
|
||||||
|
@ -28,16 +28,6 @@ help: add missing generic argument
|
||||||
LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_, T> {
|
LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_, T> {
|
||||||
| +++
|
| +++
|
||||||
|
|
||||||
error[E0515]: cannot return value referencing temporary value
|
error: aborting due to 2 previous errors
|
||||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:19:5
|
|
||||||
|
|
|
||||||
LL | LockedMarket(generator.lock().unwrap().buy())
|
|
||||||
| ^^^^^^^^^^^^^-------------------------^^^^^^^
|
|
||||||
| | |
|
|
||||||
| | temporary value created here
|
|
||||||
| returns a value referencing data owned by the current function
|
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
For more information about this error, try `rustc --explain E0107`.
|
||||||
|
|
||||||
Some errors have detailed explanations: E0107, E0515.
|
|
||||||
For more information about an error, try `rustc --explain E0107`.
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator<Item = Lint>
|
||||||
|
|
||||||
fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
||||||
//~^ ERROR: failed to resolve
|
//~^ ERROR: failed to resolve
|
||||||
//~| ERROR: `()` is not an iterator
|
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,15 +28,7 @@ LL | fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator<Item = L
|
||||||
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
||||||
| -------------------------------------- returning this opaque type `FlatMap<impl Iterator, [type error], [closure@$DIR/issue-72911.rs:9:27: 9:51]>`
|
| -------------------------------------- returning this opaque type `FlatMap<impl Iterator, [type error], [closure@$DIR/issue-72911.rs:9:27: 9:51]>`
|
||||||
|
|
||||||
error[E0277]: `()` is not an iterator
|
error: aborting due to 3 previous errors
|
||||||
--> $DIR/issue-72911.rs:17:20
|
|
||||||
|
|
|
||||||
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `()` is not an iterator
|
|
||||||
|
|
|
||||||
= help: the trait `Iterator` is not implemented for `()`
|
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
Some errors have detailed explanations: E0433, E0720.
|
||||||
|
For more information about an error, try `rustc --explain E0433`.
|
||||||
Some errors have detailed explanations: E0277, E0433, E0720.
|
|
||||||
For more information about an error, try `rustc --explain E0277`.
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue