Skip to content

Commit

Permalink
fake capture if min_captures empty
Browse files Browse the repository at this point in the history
  • Loading branch information
ouz-a committed Oct 23, 2022
1 parent 9be2f35 commit 8b984e5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
7 changes: 6 additions & 1 deletion compiler/rustc_hir_typeck/src/upvar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

// We now fake capture information for all variables that are mentioned within the closure
// We do this after handling migrations so that min_captures computes before
if !enable_precise_capture(self.tcx, span) {
if !enable_precise_capture(self.tcx, span)
// (ouz-a) #93242 - ICE happens because closure_min_captures is empty with
// 2021 edition, because it sets `enable_precise_capture` to true, which won't allow us
// fake capture information this check sidesteps that and avoids the ICE.
|| (infer_kind == None && self.typeck_results.borrow().closure_min_captures.is_empty())
{
let mut capture_information: InferredCaptureInformation<'tcx> = Default::default();

if let Some(upvars) = self.tcx.upvars_mentioned(closure_def_id) {
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/closures/issue-93242.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// check-pass
// edition:2021

pub fn something(path: &[usize]) -> impl Fn() -> usize + '_ {
move || match path {
[] => 0,
_ => 1,
}
}

fn main(){}

0 comments on commit 8b984e5

Please sign in to comment.