Split the "raw integer bytes" part out of Scalar
This commit is contained in:
parent
8a18963f28
commit
6fdbde5f46
1 changed files with 9 additions and 8 deletions
|
@ -8,8 +8,9 @@ use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_hir::{BinOp, BinOpKind, Block, Expr, ExprKind, HirId, QPath, UnOp};
|
use rustc_hir::{BinOp, BinOpKind, Block, Expr, ExprKind, HirId, QPath, UnOp};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::subst::{Subst, SubstsRef};
|
use rustc_middle::ty::subst::{Subst, SubstsRef};
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Ty, TyCtxt, ScalarInt};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
|
use rustc_middle::mir::interpret::Scalar;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
use std::cmp::Ordering::{self, Equal};
|
use std::cmp::Ordering::{self, Equal};
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
@ -500,21 +501,21 @@ impl<'a, 'tcx> ConstEvalLateContext<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn miri_to_const(result: &ty::Const<'_>) -> Option<Constant> {
|
pub fn miri_to_const(result: &ty::Const<'_>) -> Option<Constant> {
|
||||||
use rustc_middle::mir::interpret::{ConstValue, Scalar};
|
use rustc_middle::mir::interpret::{ConstValue};
|
||||||
match result.val {
|
match result.val {
|
||||||
ty::ConstKind::Value(ConstValue::Scalar(Scalar::Raw { data: d, .. })) => {
|
ty::ConstKind::Value(ConstValue::Scalar(Scalar::Raw(int))) => {
|
||||||
match result.ty.kind() {
|
match result.ty.kind() {
|
||||||
ty::Bool => Some(Constant::Bool(d == 1)),
|
ty::Bool => Some(Constant::Bool(int == ScalarInt::TRUE)),
|
||||||
ty::Uint(_) | ty::Int(_) => Some(Constant::Int(d)),
|
ty::Uint(_) | ty::Int(_) => Some(Constant::Int(int.assert_bits(int.size()))),
|
||||||
ty::Float(FloatTy::F32) => Some(Constant::F32(f32::from_bits(
|
ty::Float(FloatTy::F32) => Some(Constant::F32(f32::from_bits(
|
||||||
d.try_into().expect("invalid f32 bit representation"),
|
int.try_into().expect("invalid f32 bit representation"),
|
||||||
))),
|
))),
|
||||||
ty::Float(FloatTy::F64) => Some(Constant::F64(f64::from_bits(
|
ty::Float(FloatTy::F64) => Some(Constant::F64(f64::from_bits(
|
||||||
d.try_into().expect("invalid f64 bit representation"),
|
int.try_into().expect("invalid f64 bit representation"),
|
||||||
))),
|
))),
|
||||||
ty::RawPtr(type_and_mut) => {
|
ty::RawPtr(type_and_mut) => {
|
||||||
if let ty::Uint(_) = type_and_mut.ty.kind() {
|
if let ty::Uint(_) = type_and_mut.ty.kind() {
|
||||||
return Some(Constant::RawPtr(d));
|
return Some(Constant::RawPtr(int.assert_bits(int.size())));
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue