diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-01-18 10:34:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-18 10:34:20 +0100 |
| commit | 34362b826dbcfcb27ad74697266c4966bbff23b7 (patch) | |
| tree | 5fd612cab3564b801b23e2a8d66082eeaee01e06 /compiler | |
| parent | c526cce28156c100e4409f6f9e13aa79c027252f (diff) | |
| parent | f1ef930c9d06ebd8a3839346b493f49d40fa69e5 (diff) | |
| download | rust-34362b826dbcfcb27ad74697266c4966bbff23b7.tar.gz rust-34362b826dbcfcb27ad74697266c4966bbff23b7.zip | |
Rollup merge of #120057 - oli-obk:not_sure_wtf_is_going_on, r=compiler-errors
Don't ICE when deducing future output if other errors already occurred The situation can't really happen outside of erroneous code. What was interesting is that it ICEd before emitting any other diagnostics. This was because the other errors were silenced due to cycle_delay_bug cycle errors. r? ```@compiler-errors``` fixes #119890
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_hir_typeck/src/closure.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/rustc_hir_typeck/src/closure.rs b/compiler/rustc_hir_typeck/src/closure.rs index d11198d7fd4..d5a39cd8405 100644 --- a/compiler/rustc_hir_typeck/src/closure.rs +++ b/compiler/rustc_hir_typeck/src/closure.rs @@ -754,16 +754,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { get_future_output(obligation.predicate, obligation.cause.span) })? } + ty::Alias(ty::Projection, _) => { + return Some(Ty::new_error_with_message( + self.tcx, + closure_span, + "this projection should have been projected to an opaque type", + )); + } ty::Alias(ty::Opaque, ty::AliasTy { def_id, args, .. }) => self .tcx .explicit_item_bounds(def_id) .iter_instantiated_copied(self.tcx, args) .find_map(|(p, s)| get_future_output(p.as_predicate(), s))?, ty::Error(_) => return Some(ret_ty), - _ => span_bug!( - closure_span, - "async fn coroutine return type not an inference variable: {ret_ty}" - ), + _ => { + span_bug!(closure_span, "invalid async fn coroutine return type: {ret_ty:?}") + } }; let output_ty = self.normalize(closure_span, output_ty); |
