Rollup merge of #81991 - osa1:issue81839, r=estebank
Fix panic in 'remove semicolon' when types are not local It's not possible to check if removing a semicolon fixes the type error when checking match arms and one or both of the last arm's and the current arm's return types are imported "opaque" types. In these cases we don't generate a "consider removing semicolon" suggestions. Fixes #81839 --- I'm not sure how to add a test for this. I think the test would need at least two crates. Do we have any existing tests that do this so that I can take a look?
This commit is contained in:
commit
39af025741
5 changed files with 71 additions and 8 deletions
|
@ -1074,13 +1074,26 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
};
|
||||
let last_expr_ty = self.node_ty(last_expr.hir_id);
|
||||
let needs_box = match (last_expr_ty.kind(), expected_ty.kind()) {
|
||||
(ty::Opaque(last_def_id, _), ty::Opaque(exp_def_id, _))
|
||||
if last_def_id == exp_def_id =>
|
||||
{
|
||||
StatementAsExpression::CorrectType
|
||||
}
|
||||
(ty::Opaque(last_def_id, last_bounds), ty::Opaque(exp_def_id, exp_bounds)) => {
|
||||
debug!(
|
||||
"both opaque, likely future {:?} {:?} {:?} {:?}",
|
||||
last_def_id, last_bounds, exp_def_id, exp_bounds
|
||||
);
|
||||
let last_hir_id = self.tcx.hir().local_def_id_to_hir_id(last_def_id.expect_local());
|
||||
let exp_hir_id = self.tcx.hir().local_def_id_to_hir_id(exp_def_id.expect_local());
|
||||
|
||||
let (last_local_id, exp_local_id) =
|
||||
match (last_def_id.as_local(), exp_def_id.as_local()) {
|
||||
(Some(last_hir_id), Some(exp_hir_id)) => (last_hir_id, exp_hir_id),
|
||||
(_, _) => return None,
|
||||
};
|
||||
|
||||
let last_hir_id = self.tcx.hir().local_def_id_to_hir_id(last_local_id);
|
||||
let exp_hir_id = self.tcx.hir().local_def_id_to_hir_id(exp_local_id);
|
||||
|
||||
match (
|
||||
&self.tcx.hir().expect_item(last_hir_id).kind,
|
||||
&self.tcx.hir().expect_item(exp_hir_id).kind,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue