diff options
| author | b-naber <bn263@gmx.de> | 2022-06-27 16:32:47 +0200 |
|---|---|---|
| committer | b-naber <bn263@gmx.de> | 2022-09-13 17:40:59 +0200 |
| commit | da373e3ea83186c93f2902efac445a155807d5e6 (patch) | |
| tree | b5c47c42f4e4dd18c8f662103c59c3b18f8fbdd4 | |
| parent | 11c831d6960b96bbf23e788291ddc25c9aa2cb23 (diff) | |
| download | rust-da373e3ea83186c93f2902efac445a155807d5e6.tar.gz rust-da373e3ea83186c93f2902efac445a155807d5e6.zip | |
use ty::Unevaluated<'tcx, ()> in type system
| -rw-r--r-- | src/constant.rs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/constant.rs b/src/constant.rs index 0305341da78..7bf578b6a4e 100644 --- a/src/constant.rs +++ b/src/constant.rs @@ -124,11 +124,7 @@ pub(crate) fn codegen_constant<'tcx>( ) -> CValue<'tcx> { let const_ = match fx.monomorphize(constant.literal) { ConstantKind::Ty(ct) => ct, - ConstantKind::Val(val, ty) => return codegen_const_value(fx, val, ty), - }; - let const_val = match const_.kind() { - ConstKind::Value(valtree) => fx.tcx.valtree_to_const_val((const_.ty(), valtree)), - ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted }) + ConstantKind::Unevaluated(mir::Unevaluated { def, substs, promoted }) if fx.tcx.is_static(def.did) => { assert!(substs.is_empty()); @@ -136,7 +132,7 @@ pub(crate) fn codegen_constant<'tcx>( return codegen_static_ref(fx, def.did, fx.layout_of(const_.ty())).to_cvalue(fx); } - ConstKind::Unevaluated(unevaluated) => { + ConstantKind::Unevaluated(unevaluated) => { match fx.tcx.const_eval_resolve(ParamEnv::reveal_all(), unevaluated, None) { Ok(const_val) => const_val, Err(_) => { @@ -144,6 +140,17 @@ pub(crate) fn codegen_constant<'tcx>( } } } + ConstantKind::Val(val, ty) => return codegen_const_value(fx, val, ty), + }; + let const_val = match const_.kind() { + ConstKind::Value(valtree) => fx.tcx.valtree_to_const_val((const_.ty(), valtree)), + ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted }) + if fx.tcx.is_static(def.did) => + { + assert!(substs.is_empty()); + assert!(promoted.is_none()); + return codegen_static_ref(fx, def.did, fx.layout_of(const_.ty())).to_cvalue(fx); + } ConstKind::Param(_) | ConstKind::Infer(_) | ConstKind::Bound(_, _) |
