mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Fix evaluating negative for floating point types
This commit is contained in:
parent
cbd14e9840
commit
fd034bea1a
@ -113,6 +113,10 @@ fn floating_point() {
|
||||
r#"const GOAL: f32 = 2.0 + 3.0 * 5.5 - 8.;"#,
|
||||
i128::from_le_bytes(pad16(&f32::to_le_bytes(10.5), true)),
|
||||
);
|
||||
check_number(
|
||||
r#"const GOAL: f32 = -90.0 + 36.0;"#,
|
||||
i128::from_le_bytes(pad16(&f32::to_le_bytes(-54.0), true)),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -759,6 +759,18 @@ impl Evaluator<'_> {
|
||||
let size = self.size_of_sized(&ty, locals, "operand of unary op")?;
|
||||
c = self.read_memory(Address::from_bytes(c)?, size)?;
|
||||
}
|
||||
if let TyKind::Scalar(chalk_ir::Scalar::Float(f)) = ty.kind(Interner) {
|
||||
match f {
|
||||
chalk_ir::FloatTy::F32 => {
|
||||
let c = -from_bytes!(f32, c);
|
||||
Owned(c.to_le_bytes().into())
|
||||
}
|
||||
chalk_ir::FloatTy::F64 => {
|
||||
let c = -from_bytes!(f32, c);
|
||||
Owned(c.to_le_bytes().into())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let mut c = c.to_vec();
|
||||
if ty.as_builtin() == Some(BuiltinType::Bool) {
|
||||
c[0] = 1 - c[0];
|
||||
@ -779,6 +791,7 @@ impl Evaluator<'_> {
|
||||
}
|
||||
Owned(c)
|
||||
}
|
||||
}
|
||||
Rvalue::CheckedBinaryOp(op, lhs, rhs) => {
|
||||
let lc = self.eval_operand(lhs, locals)?;
|
||||
let rc = self.eval_operand(rhs, locals)?;
|
||||
|
Loading…
Reference in New Issue
Block a user