Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
floating point to floating point casts have undefined behaviour #15536
Comments
|
Nominating |
huonw
added
I-nominated
labels
Jul 8, 2014
|
I think this is not a 1.0 issue. There is no reasonable backwards incompatible language change we can make here to fix it. The only thing to do is to change the LLVM semantics here to not be UB, but rather be an undefined value. |
zwarich
commented
Jul 10, 2014
|
@pcwalton the LLVM semantics here are that the result is an undefined value, not that the instruction exhibits undefined behavior. Otherwise you wouldn't be able to hoist an |
|
OK, then I believe this is not a bug, just something to remember to note in the spec. |
pnkfelix
added
P-high
and removed
I-nominated
labels
Jul 10, 2014
|
@zwarich: Rust allows undefined behaviour if you have an undefined value. An undefined value has no live range so it doesn't correspond to a reserved register with a preserved value and can vary between reads. That means something like |
zwarich
commented
Jul 20, 2014
|
@thestinger That's a good point, but that just makes it like the other bugs that aren't in 1.0. |
|
Programs can be written depending on the value of undefined behaviour, and changing it to either fail or provide a specific result will break those programs. This isn't C where undefined behaviour is a problem in user code. |
|
We may need a UB label for such issues IMO |
arielb1
referenced this issue
Jun 15, 2015
Closed
LLVM undef with overflowing floating-point -> integer casts #24331
|
Can anybody reproduce this undefined behaviour? In #![crate_type="rlib"]
const f:f64 = 1.0E+300;
pub static ffull:f64 = f;
pub static ftrunc:f32 = f as f32;
pub static f2i:u64 = f as u64;
pub static i2f:f32 = 0xFFFFFFFFFFFFFFFFu64 as f32;
I asked for additional information on llvm-dev |
|
@ranma42 From what I understood from the reference, the LLVM |
pnkfelix
added
T-compiler
T-lang
labels
Feb 9, 2016
nrc
added
P-medium
and removed
P-high
labels
Mar 31, 2016
|
(moving this back to P-medium and letting the |
|
My thought is to define this as resulting as infinity. |
|
@drbo But doing that could be potentially more expensive than just making the result unspecified but without causing undefined behavior. |
huonw commentedJul 8, 2014
http://llvm.org/docs/LangRef.html#fptrunc-to-instruction
e.g.
1e300f64 as f32cc #10184, #10185