Rollup merge of #83018 - oli-obk:float_check, r=davidtwco

Reintroduce accidentally deleted assertions.

These were removed in https://github.com/rust-lang/rust/pull/50198
This commit is contained in:
Yuki Okushi 2021-03-12 08:55:22 +09:00 committed by GitHub
commit 14846d945d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,3 +1,4 @@
use rustc_apfloat::Float;
use rustc_ast as ast; use rustc_ast as ast;
use rustc_middle::mir::interpret::{ use rustc_middle::mir::interpret::{
Allocation, ConstValue, LitToConstError, LitToConstInput, Scalar, Allocation, ConstValue, LitToConstError, LitToConstInput, Scalar,
@ -61,20 +62,40 @@ fn parse_float<'tcx>(num: Symbol, fty: ty::FloatTy, neg: bool) -> Result<ConstVa
use rustc_apfloat::ieee::{Double, Single}; use rustc_apfloat::ieee::{Double, Single};
let scalar = match fty { let scalar = match fty {
ty::FloatTy::F32 => { ty::FloatTy::F32 => {
num.parse::<f32>().map_err(|_| ())?; let rust_f = num.parse::<f32>().map_err(|_| ())?;
let mut f = num.parse::<Single>().unwrap_or_else(|e| { let mut f = num.parse::<Single>().unwrap_or_else(|e| {
panic!("apfloat::ieee::Single failed to parse `{}`: {:?}", num, e) panic!("apfloat::ieee::Single failed to parse `{}`: {:?}", num, e)
}); });
assert!(
u128::from(rust_f.to_bits()) == f.to_bits(),
"apfloat::ieee::Single gave different result for `{}`: \
{}({:#x}) vs Rust's {}({:#x})",
rust_f,
f,
f.to_bits(),
Single::from_bits(rust_f.to_bits().into()),
rust_f.to_bits()
);
if neg { if neg {
f = -f; f = -f;
} }
Scalar::from_f32(f) Scalar::from_f32(f)
} }
ty::FloatTy::F64 => { ty::FloatTy::F64 => {
num.parse::<f64>().map_err(|_| ())?; let rust_f = num.parse::<f64>().map_err(|_| ())?;
let mut f = num.parse::<Double>().unwrap_or_else(|e| { let mut f = num.parse::<Double>().unwrap_or_else(|e| {
panic!("apfloat::ieee::Double failed to parse `{}`: {:?}", num, e) panic!("apfloat::ieee::Double failed to parse `{}`: {:?}", num, e)
}); });
assert!(
u128::from(rust_f.to_bits()) == f.to_bits(),
"apfloat::ieee::Double gave different result for `{}`: \
{}({:#x}) vs Rust's {}({:#x})",
rust_f,
f,
f.to_bits(),
Double::from_bits(rust_f.to_bits().into()),
rust_f.to_bits()
);
if neg { if neg {
f = -f; f = -f;
} }