diff options
| author | William Throwe <wtt6@cornell.edu> | 2015-08-22 20:06:25 -0400 |
|---|---|---|
| committer | William Throwe <wtt6@cornell.edu> | 2015-08-22 20:08:53 -0400 |
| commit | 5e9008dfb7be19a51855009f67b57738c7dea5d2 (patch) | |
| tree | 0e4d01a70693be074c0361a37b93a0a07a8882dc /src/libstd | |
| parent | 4a1fda807e97cc2bbc12a7f15d0566d827004e48 (diff) | |
| download | rust-5e9008dfb7be19a51855009f67b57738c7dea5d2.tar.gz rust-5e9008dfb7be19a51855009f67b57738c7dea5d2.zip | |
Fix undefined behavior in f64::sqrt
This fixes a reappearance of bug #9987 introduced in 1ddee8070d3cb83609b1f71c29e3deda3d30fd51, which caused f64::tests::test_sqrt_domain to fail (at least on some systems).
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/num/f64.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs index 14c540e819e..252a941d86c 100644 --- a/src/libstd/num/f64.rs +++ b/src/libstd/num/f64.rs @@ -454,7 +454,11 @@ impl f64 { #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn sqrt(self) -> f64 { - unsafe { intrinsics::sqrtf64(self) } + if self < 0.0 { + NAN + } else { + unsafe { intrinsics::sqrtf64(self) } + } } /// Returns `e^(self)`, (the exponential function). |
