diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-08-17 17:00:45 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-08-17 23:32:30 -0700 |
| commit | 8a7b0fad531f2cbb40aace2bdfb5f03060a61d33 (patch) | |
| tree | 99e9e41afaf66e95fcd789d1da50ef83de859b6e /src/test | |
| parent | 47ea0cfb6bd250c970e3a61d62bfa1b1c7bb27d4 (diff) | |
| download | rust-8a7b0fad531f2cbb40aace2bdfb5f03060a61d33.tar.gz rust-8a7b0fad531f2cbb40aace2bdfb5f03060a61d33.zip | |
trans: Call `fmod` manually for 32-bit float rem
Currently `f32 % f32` will generate a link error on 32-bit MSVC because LLVM will lower the operation to a call to the nonexistent function `fmodf`. Work around in this in the backend by lowering to a call to `fmod` instead with necessary extension/truncation between floats/doubles. Closes #27859
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/issue-27859.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-27859.rs b/src/test/run-pass/issue-27859.rs new file mode 100644 index 00000000000..900614be612 --- /dev/null +++ b/src/test/run-pass/issue-27859.rs @@ -0,0 +1,27 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[inline(never)] +fn foo(a: f32, b: f32) -> f32 { + a % b +} + +#[inline(never)] +fn bar(a: f32, b: f32) -> f32 { + ((a as f64) % (b as f64)) as f32 +} + +fn main() { + let unknown_float = std::env::args().len(); + println!("{}", foo(4.0, unknown_float as f32)); + println!("{}", foo(5.0, (unknown_float as f32) + 1.0)); + println!("{}", bar(6.0, (unknown_float as f32) + 2.0)); + println!("{}", bar(7.0, (unknown_float as f32) + 3.0)); +} |
