rustc_mir: remove redundant wrapping of return type in numeric_intrinsic()

This commit is contained in:
Matthias Krüger 2021-02-21 13:44:16 +01:00
parent 76b9b16b4d
commit a9b90c02a2

View File

@ -23,11 +23,7 @@ use super::{
mod caller_location; mod caller_location;
mod type_name; mod type_name;
fn numeric_intrinsic<'tcx, Tag>( fn numeric_intrinsic<Tag>(name: Symbol, bits: u128, kind: Primitive) -> Scalar<Tag> {
name: Symbol,
bits: u128,
kind: Primitive,
) -> InterpResult<'tcx, Scalar<Tag>> {
let size = match kind { let size = match kind {
Primitive::Int(integer, _) => integer.size(), Primitive::Int(integer, _) => integer.size(),
_ => bug!("invalid `{}` argument: {:?}", name, bits), _ => bug!("invalid `{}` argument: {:?}", name, bits),
@ -41,7 +37,7 @@ fn numeric_intrinsic<'tcx, Tag>(
sym::bitreverse => (bits << extra).reverse_bits(), sym::bitreverse => (bits << extra).reverse_bits(),
_ => bug!("not a numeric intrinsic: {}", name), _ => bug!("not a numeric intrinsic: {}", name),
}; };
Ok(Scalar::from_uint(bits_out, size)) Scalar::from_uint(bits_out, size)
} }
/// The logic for all nullary intrinsics is implemented here. These intrinsics don't get evaluated /// The logic for all nullary intrinsics is implemented here. These intrinsics don't get evaluated
@ -208,7 +204,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
if nonzero && bits == 0 { if nonzero && bits == 0 {
throw_ub_format!("`{}_nonzero` called on 0", intrinsic_name); throw_ub_format!("`{}_nonzero` called on 0", intrinsic_name);
} }
let out_val = numeric_intrinsic(intrinsic_name, bits, kind)?; let out_val = numeric_intrinsic(intrinsic_name, bits, kind);
self.write_scalar(out_val, dest)?; self.write_scalar(out_val, dest)?;
} }
sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => { sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => {