Check for body owner fallibly

This commit is contained in:
Michael Goulet 2023-04-11 16:52:20 +00:00
parent 3c2e2dd5c5
commit 1178c49a1b
3 changed files with 45 additions and 1 deletions

View File

@ -2380,8 +2380,8 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
}
if let Some(ty::subst::GenericArgKind::Type(_)) = subst.map(|subst| subst.unpack())
&& let Some(body_id) = self.tcx.hir().maybe_body_owned_by(obligation.cause.body_id)
{
let body_id = self.tcx.hir().body_owned_by(obligation.cause.body_id);
let mut expr_finder = FindExprBySpan::new(span);
expr_finder.visit_expr(&self.tcx.hir().body(body_id).value);

View File

@ -0,0 +1,12 @@
struct NeedsDropTypes<'tcx, F>(std::marker::PhantomData<&'tcx F>);
impl<'tcx, F, I> Iterator for NeedsDropTypes<'tcx, F>
//~^ ERROR type annotations needed
where
F: Fn(&Missing) -> Result<I, ()>,
//~^ ERROR cannot find type `Missing` in this scope
I: Iterator<Item = Missing>,
//~^ ERROR cannot find type `Missing` in this scope
{}
fn main() {}

View File

@ -0,0 +1,32 @@
error[E0412]: cannot find type `Missing` in this scope
--> $DIR/issue-110157.rs:6:12
|
LL | F: Fn(&Missing) -> Result<I, ()>,
| ^^^^^^^ not found in this scope
error[E0412]: cannot find type `Missing` in this scope
--> $DIR/issue-110157.rs:8:24
|
LL | I: Iterator<Item = Missing>,
| ^^^^^^^ not found in this scope
error[E0283]: type annotations needed
--> $DIR/issue-110157.rs:3:31
|
LL | impl<'tcx, F, I> Iterator for NeedsDropTypes<'tcx, F>
| ^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `I`
|
= note: cannot satisfy `_: Iterator`
note: required for `NeedsDropTypes<'tcx, F>` to implement `Iterator`
--> $DIR/issue-110157.rs:3:18
|
LL | impl<'tcx, F, I> Iterator for NeedsDropTypes<'tcx, F>
| ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
...
LL | I: Iterator<Item = Missing>,
| ------------------------ unsatisfied trait bound introduced here
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0283, E0412.
For more information about an error, try `rustc --explain E0283`.