Rollup merge of #105983 - compiler-errors:issue-105981, r=tmiasko
Add a missing early return in drop tracking `handle_uninhabited_return` This return is needed so we don't call `Ty::is_inhabited_from` from a type with ty/ct vars in it. Fixes #105981
This commit is contained in:
commit
273fe60269
3 changed files with 94 additions and 0 deletions
|
@ -233,6 +233,7 @@ impl<'a, 'tcx> DropRangeVisitor<'a, 'tcx> {
|
|||
self.tcx()
|
||||
.sess
|
||||
.delay_span_bug(expr.span, format!("could not resolve infer vars in `{ty}`"));
|
||||
return;
|
||||
}
|
||||
let ty = self.tcx().erase_regions(ty);
|
||||
let m = self.tcx().parent_module(expr.hir_id).to_def_id();
|
||||
|
|
15
src/test/ui/generator/unresolved-ct-var-drop-tracking.rs
Normal file
15
src/test/ui/generator/unresolved-ct-var-drop-tracking.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
// incremental
|
||||
// edition:2021
|
||||
// compile-flags: -Zdrop-tracking
|
||||
|
||||
fn main() {
|
||||
let _ = async {
|
||||
let s = std::array::from_fn(|_| ()).await;
|
||||
//~^ ERROR `[(); _]` is not a future
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
};
|
||||
}
|
78
src/test/ui/generator/unresolved-ct-var-drop-tracking.stderr
Normal file
78
src/test/ui/generator/unresolved-ct-var-drop-tracking.stderr
Normal file
|
@ -0,0 +1,78 @@
|
|||
error[E0277]: `[(); _]` is not a future
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ---------------------------^^^^^^
|
||||
| | |
|
||||
| | `[(); _]` is not a future
|
||||
| | help: remove the `.await`
|
||||
| this call returns `[(); _]`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `[(); _]`
|
||||
= note: [(); _] must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required for `[(); _]` to implement `IntoFuture`
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0277, E0698.
|
||||
For more information about an error, try `rustc --explain E0277`.
|
Loading…
Add table
Reference in a new issue