1
Fork 0

use AllocId and Ty in ExprKind::StaticRef and delay ConstValue construction

This commit is contained in:
b-naber 2022-02-09 16:18:57 +01:00
parent 54ff25e446
commit fff06e5edc
4 changed files with 16 additions and 18 deletions

View file

@ -1,6 +1,7 @@
//! See docs in build/expr/mod.rs
use crate::build::Builder;
use rustc_middle::mir::interpret::{ConstValue, Scalar};
use rustc_middle::mir::*;
use rustc_middle::thir::*;
use rustc_middle::ty::CanonicalUserTypeAnnotation;
@ -26,11 +27,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
assert_eq!(literal.ty(), ty);
Constant { span, user_ty, literal: literal.into() }
}
ExprKind::StaticRef { literal, .. } => {
let const_val = literal.val.try_to_value().unwrap_or_else(|| {
bug!("expected `ConstKind::Value`, but found {:?}", literal.val)
});
let literal = ConstantKind::Val(const_val, literal.ty);
ExprKind::StaticRef { alloc_id, ty, .. } => {
let const_val =
ConstValue::Scalar(Scalar::from_pointer(alloc_id.into(), &this.tcx));
let literal = ConstantKind::Val(const_val, ty);
Constant { span, user_ty: None, literal }
}

View file

@ -8,7 +8,6 @@ use rustc_middle::hir::place::Place as HirPlace;
use rustc_middle::hir::place::PlaceBase as HirPlaceBase;
use rustc_middle::hir::place::ProjectionKind as HirProjectionKind;
use rustc_middle::middle::region;
use rustc_middle::mir::interpret::Scalar;
use rustc_middle::mir::{BinOp, BorrowKind, Field, UnOp};
use rustc_middle::thir::*;
use rustc_middle::ty::adjustment::{
@ -943,15 +942,8 @@ impl<'tcx> Cx<'tcx> {
let kind = if self.tcx.is_thread_local_static(id) {
ExprKind::ThreadLocalRef(id)
} else {
let ptr = self.tcx.create_static_alloc(id);
ExprKind::StaticRef {
literal: ty::Const::from_scalar(
self.tcx,
Scalar::from_pointer(ptr.into(), &self.tcx),
ty,
),
def_id: id,
}
let alloc_id = self.tcx.create_static_alloc(id);
ExprKind::StaticRef { alloc_id, ty, def_id: id }
};
ExprKind::Deref {
arg: self.thir.exprs.push(Expr { ty, temp_lifetime, span: expr.span, kind }),