Rollup merge of #132528 - compiler-errors:fallback-sugg-opt, r=jieyouxu
Use `*_opt` typeck results fns to not ICE in fallback suggestion Self-explanatory. Fixes #132517.
This commit is contained in:
commit
1a0ab892cd
@ -643,7 +643,7 @@ impl<'tcx> Visitor<'tcx> for AnnotateUnitFallbackVisitor<'_, 'tcx> {
|
|||||||
fn visit_ty(&mut self, hir_ty: &'tcx hir::Ty<'tcx>) -> Self::Result {
|
fn visit_ty(&mut self, hir_ty: &'tcx hir::Ty<'tcx>) -> Self::Result {
|
||||||
// Try to replace `_` with `()`.
|
// Try to replace `_` with `()`.
|
||||||
if let hir::TyKind::Infer = hir_ty.kind
|
if let hir::TyKind::Infer = hir_ty.kind
|
||||||
&& let ty = self.fcx.typeck_results.borrow().node_type(hir_ty.hir_id)
|
&& let Some(ty) = self.fcx.typeck_results.borrow().node_type_opt(hir_ty.hir_id)
|
||||||
&& let Some(vid) = self.fcx.root_vid(ty)
|
&& let Some(vid) = self.fcx.root_vid(ty)
|
||||||
&& self.reachable_vids.contains(&vid)
|
&& self.reachable_vids.contains(&vid)
|
||||||
{
|
{
|
||||||
@ -680,7 +680,8 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr<'tcx>) -> Self::Result {
|
|||||||
if let hir::ExprKind::Path(hir::QPath::Resolved(None, path)) = expr.kind
|
if let hir::ExprKind::Path(hir::QPath::Resolved(None, path)) = expr.kind
|
||||||
&& let Res::Def(DefKind::AssocFn, def_id) = path.res
|
&& let Res::Def(DefKind::AssocFn, def_id) = path.res
|
||||||
&& self.fcx.tcx.trait_of_item(def_id).is_some()
|
&& self.fcx.tcx.trait_of_item(def_id).is_some()
|
||||||
&& let self_ty = self.fcx.typeck_results.borrow().node_args(expr.hir_id).type_at(0)
|
&& let Some(args) = self.fcx.typeck_results.borrow().node_args_opt(expr.hir_id)
|
||||||
|
&& let self_ty = args.type_at(0)
|
||||||
&& let Some(vid) = self.fcx.root_vid(self_ty)
|
&& let Some(vid) = self.fcx.root_vid(self_ty)
|
||||||
&& self.reachable_vids.contains(&vid)
|
&& self.reachable_vids.contains(&vid)
|
||||||
&& let [.., trait_segment, _method_segment] = path.segments
|
&& let [.., trait_segment, _method_segment] = path.segments
|
||||||
@ -701,7 +702,7 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr<'tcx>) -> Self::Result {
|
|||||||
fn visit_local(&mut self, local: &'tcx hir::LetStmt<'tcx>) -> Self::Result {
|
fn visit_local(&mut self, local: &'tcx hir::LetStmt<'tcx>) -> Self::Result {
|
||||||
// For a local, try suggest annotating the type if it's missing.
|
// For a local, try suggest annotating the type if it's missing.
|
||||||
if let None = local.ty
|
if let None = local.ty
|
||||||
&& let ty = self.fcx.typeck_results.borrow().node_type(local.hir_id)
|
&& let Some(ty) = self.fcx.typeck_results.borrow().node_type_opt(local.hir_id)
|
||||||
&& let Some(vid) = self.fcx.root_vid(ty)
|
&& let Some(vid) = self.fcx.root_vid(ty)
|
||||||
&& self.reachable_vids.contains(&vid)
|
&& self.reachable_vids.contains(&vid)
|
||||||
{
|
{
|
||||||
|
4
tests/ui/never_type/suggestion-ice-132517.rs
Normal file
4
tests/ui/never_type/suggestion-ice-132517.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
fn main() {
|
||||||
|
x::<_>(|_| panic!())
|
||||||
|
//~^ ERROR cannot find function `x` in this scope
|
||||||
|
}
|
9
tests/ui/never_type/suggestion-ice-132517.stderr
Normal file
9
tests/ui/never_type/suggestion-ice-132517.stderr
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
error[E0425]: cannot find function `x` in this scope
|
||||||
|
--> $DIR/suggestion-ice-132517.rs:2:5
|
||||||
|
|
|
||||||
|
LL | x::<_>(|_| panic!())
|
||||||
|
| ^ not found in this scope
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0425`.
|
Loading…
Reference in New Issue
Block a user