handle unevaluated consts after monomophize
This commit is contained in:
parent
98803c182b
commit
0c5c3bbdab
5 changed files with 77 additions and 21 deletions
|
|
@ -40,31 +40,36 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
|||
&mut self,
|
||||
constant: &mir::Constant<'tcx>,
|
||||
) -> Result<ConstValue<'tcx>, ErrorHandled> {
|
||||
match constant.literal.val {
|
||||
let const_ = match constant.literal.val {
|
||||
ty::ConstKind::Unevaluated(def_id, substs, promoted) => {
|
||||
let substs = self.monomorphize(&substs);
|
||||
self.cx
|
||||
.tcx()
|
||||
.const_eval_resolve(ty::ParamEnv::reveal_all(), def_id, substs, promoted, None)
|
||||
.map_err(|err| {
|
||||
if promoted.is_none() {
|
||||
self.cx
|
||||
.tcx()
|
||||
.sess
|
||||
.span_err(constant.span, "erroneous constant encountered");
|
||||
}
|
||||
err
|
||||
})
|
||||
ty::ConstKind::Unevaluated(def_id, substs, promoted)
|
||||
}
|
||||
ty::ConstKind::Value(value) => ty::ConstKind::Value(value),
|
||||
ty::ConstKind::Param(_) => self.monomorphize(&constant.literal).val,
|
||||
_ => span_bug!(constant.span, "encountered bad Const in codegen: {:?}", constant),
|
||||
};
|
||||
|
||||
match const_ {
|
||||
ty::ConstKind::Unevaluated(def_id, substs, promoted) => self
|
||||
.cx
|
||||
.tcx()
|
||||
.const_eval_resolve(ty::ParamEnv::reveal_all(), def_id, substs, promoted, None)
|
||||
.map_err(|err| {
|
||||
if promoted.is_none() {
|
||||
self.cx
|
||||
.tcx()
|
||||
.sess
|
||||
.span_err(constant.span, "erroneous constant encountered");
|
||||
}
|
||||
err
|
||||
}),
|
||||
ty::ConstKind::Value(value) => Ok(value),
|
||||
_ => {
|
||||
let const_ = self.monomorphize(&constant.literal);
|
||||
if let ty::ConstKind::Value(value) = const_.val {
|
||||
Ok(value)
|
||||
} else {
|
||||
span_bug!(constant.span, "encountered bad ConstKind in codegen: {:?}", const_);
|
||||
}
|
||||
}
|
||||
_ => span_bug!(
|
||||
constant.span,
|
||||
"encountered bad ConstKind after monomorphizing: {:?}",
|
||||
const_
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue