address review
This commit is contained in:
parent
38814fc039
commit
f39c0d6b0a
1 changed files with 14 additions and 14 deletions
|
@ -159,6 +159,9 @@ impl<'tcx> Cx<'tcx> {
|
||||||
Expr { temp_lifetime, ty: adjustment.target, span, kind }
|
Expr { temp_lifetime, ty: adjustment.target, span, kind }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Lowers a cast expression.
|
||||||
|
///
|
||||||
|
/// Dealing with user type annotations is left to the caller.
|
||||||
fn mirror_expr_cast(
|
fn mirror_expr_cast(
|
||||||
&mut self,
|
&mut self,
|
||||||
source: &'tcx hir::Expr<'tcx>,
|
source: &'tcx hir::Expr<'tcx>,
|
||||||
|
@ -198,25 +201,23 @@ impl<'tcx> Cx<'tcx> {
|
||||||
};
|
};
|
||||||
|
|
||||||
let res = self.typeck_results().qpath_res(qpath, source.hir_id);
|
let res = self.typeck_results().qpath_res(qpath, source.hir_id);
|
||||||
let (discr_did, discr_offset, discr_ty, substs) = {
|
let ty = self.typeck_results().node_type(source.hir_id);
|
||||||
let ty = self.typeck_results().node_type(source.hir_id);
|
let ty::Adt(adt_def, substs) = ty.kind() else {
|
||||||
let ty::Adt(adt_def, substs) = ty.kind() else {
|
|
||||||
return ExprKind::Cast { source: self.mirror_expr(source)};
|
return ExprKind::Cast { source: self.mirror_expr(source)};
|
||||||
};
|
};
|
||||||
let Res::Def(
|
let Res::Def(
|
||||||
DefKind::Ctor(CtorOf::Variant, CtorKind::Const),
|
DefKind::Ctor(CtorOf::Variant, CtorKind::Const),
|
||||||
variant_ctor_id,
|
variant_ctor_id,
|
||||||
) = res else {
|
) = res else {
|
||||||
return ExprKind::Cast { source: self.mirror_expr(source)};
|
return ExprKind::Cast { source: self.mirror_expr(source)};
|
||||||
};
|
};
|
||||||
|
|
||||||
let idx = adt_def.variant_index_with_ctor_id(variant_ctor_id);
|
let idx = adt_def.variant_index_with_ctor_id(variant_ctor_id);
|
||||||
let (d, o) = adt_def.discriminant_def_for_variant(idx);
|
let (discr_did, discr_offset) = adt_def.discriminant_def_for_variant(idx);
|
||||||
use rustc_middle::ty::util::IntTypeExt;
|
|
||||||
let ty = adt_def.repr().discr_type();
|
use rustc_middle::ty::util::IntTypeExt;
|
||||||
let ty = ty.to_ty(tcx);
|
let ty = adt_def.repr().discr_type();
|
||||||
(d, o, ty, substs)
|
let discr_ty = ty.to_ty(tcx);
|
||||||
};
|
|
||||||
|
|
||||||
let param_env_ty = self.param_env.and(discr_ty);
|
let param_env_ty = self.param_env.and(discr_ty);
|
||||||
let size = tcx
|
let size = tcx
|
||||||
|
@ -231,10 +232,9 @@ impl<'tcx> Cx<'tcx> {
|
||||||
let offset = self.thir.exprs.push(Expr { temp_lifetime, ty: discr_ty, span, kind });
|
let offset = self.thir.exprs.push(Expr { temp_lifetime, ty: discr_ty, span, kind });
|
||||||
|
|
||||||
let source = match discr_did {
|
let source = match discr_did {
|
||||||
|
// in case we are offsetting from a computed discriminant
|
||||||
|
// and not the beginning of discriminants (which is always `0`)
|
||||||
Some(did) => {
|
Some(did) => {
|
||||||
// in case we are offsetting from a computed discriminant
|
|
||||||
// and not the beginning of discriminants (which is always `0`)
|
|
||||||
|
|
||||||
let kind = ExprKind::NamedConst { def_id: did, substs, user_ty: None };
|
let kind = ExprKind::NamedConst { def_id: did, substs, user_ty: None };
|
||||||
let lhs =
|
let lhs =
|
||||||
self.thir.exprs.push(Expr { temp_lifetime, ty: discr_ty, span, kind });
|
self.thir.exprs.push(Expr { temp_lifetime, ty: discr_ty, span, kind });
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue