diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-11-21 14:11:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-21 14:11:12 +0100 |
| commit | ed22bdc18f466f03737b4cdd8dba6d5524fb5389 (patch) | |
| tree | f36deb87fa97b6bdb87dc60a1363e14d959f709b /compiler/rustc_codegen_ssa/src | |
| parent | 844e3fb92827eed09ebee58e0e93f5317806b9fa (diff) | |
| parent | 3338244f698022611bbc77947f9eb8b5d24d56e5 (diff) | |
| download | rust-ed22bdc18f466f03737b4cdd8dba6d5524fb5389.tar.gz rust-ed22bdc18f466f03737b4cdd8dba6d5524fb5389.zip | |
Rollup merge of #104605 - RalfJung:clf_consts, r=bjorn3
deduplicate constant evaluation in cranelift backend The cranelift backend had two matches on `ConstantKind`, which can be avoided, and used this `eval_for_mir` that nothing else uses... this makes things more consistent with the (better-tested) LLVM backend. I noticed this because cranelift was the only user of `eval_for_mir`. However `try_eval_for_mir` still has one other user in `eval`... the odd thing is that the interpreter has its own `eval_mir_constant` which seems to duplicate the same functionality and does not use `try_eval_for_mir`. No idea what is happening here. r? ``@bjorn3`` Cc ``@lcnr``
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/constant.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/constant.rs b/compiler/rustc_codegen_ssa/src/mir/constant.rs index 4c6ab457c49..53ff3c24096 100644 --- a/compiler/rustc_codegen_ssa/src/mir/constant.rs +++ b/compiler/rustc_codegen_ssa/src/mir/constant.rs @@ -42,7 +42,14 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { }; self.cx.tcx().const_eval_resolve(ty::ParamEnv::reveal_all(), uv, None).map_err(|err| { - self.cx.tcx().sess.span_err(constant.span, "erroneous constant encountered"); + match err { + ErrorHandled::Reported(_) => { + self.cx.tcx().sess.span_err(constant.span, "erroneous constant encountered"); + } + ErrorHandled::TooGeneric => { + span_bug!(constant.span, "codegen encountered polymorphic constant: {:?}", err); + } + } err }) } |
