diff options
| author | Michael Goulet <michael@errs.io> | 2022-12-11 19:46:58 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-12-11 19:48:24 +0000 |
| commit | bc293ed53e9a747b12e03eee43df96d47e362bd2 (patch) | |
| tree | 1a7ddff1ed774da43bad99f0bfda6bbf67213d47 /compiler/rustc_middle/src | |
| parent | d137783642b0b98eda2796dc66bffc2b089a8327 (diff) | |
| download | rust-bc293ed53e9a747b12e03eee43df96d47e362bd2.tar.gz rust-bc293ed53e9a747b12e03eee43df96d47e362bd2.zip | |
bug! with a better error message for failing Instance::resolve
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/ty/instance.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/ty/instance.rs b/compiler/rustc_middle/src/ty/instance.rs index 586460986dd..35d369ffc89 100644 --- a/compiler/rustc_middle/src/ty/instance.rs +++ b/compiler/rustc_middle/src/ty/instance.rs @@ -385,6 +385,21 @@ impl<'tcx> Instance<'tcx> { ) } + pub fn expect_resolve( + tcx: TyCtxt<'tcx>, + param_env: ty::ParamEnv<'tcx>, + def_id: DefId, + substs: SubstsRef<'tcx>, + ) -> Instance<'tcx> { + match ty::Instance::resolve(tcx, param_env, def_id, substs) { + Ok(Some(instance)) => instance, + _ => bug!( + "failed to resolve instance for {}", + tcx.def_path_str_with_substs(def_id, substs) + ), + } + } + // This should be kept up to date with `resolve`. pub fn resolve_opt_const_arg( tcx: TyCtxt<'tcx>, @@ -525,7 +540,7 @@ impl<'tcx> Instance<'tcx> { pub fn resolve_drop_in_place(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> ty::Instance<'tcx> { let def_id = tcx.require_lang_item(LangItem::DropInPlace, None); let substs = tcx.intern_substs(&[ty.into()]); - Instance::resolve(tcx, ty::ParamEnv::reveal_all(), def_id, substs).unwrap().unwrap() + Instance::expect_resolve(tcx, ty::ParamEnv::reveal_all(), def_id, substs) } #[instrument(level = "debug", skip(tcx), ret)] |
