| Issue |
180776
|
| Summary |
Incorrect values in _BitInt when casing from double
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
gbMattN
|
Full example on [godbolt here](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1AB9U8lJL6yAngGVG6AMKpaAVxYMJ0hwBk8DTAA5dwAjTGIQADZI0gAHVAVCWwZnNw8vOISkgT8A4JYwiOiLTCsbASECJmICVPdPKRKy5Mrqglyg0PComIUqmrr0xr62jvzCnoBKC1RXYmR2DgBSACYAZn9kNywAaiW1xxYmAgQAOgR97CWNAEFVjYYt1139xz78VHPL67vbtAY%2BjtkAhqgAqHYITCqJYAVgAQrCACJ7NbIpYAdgRtx2OL2KxWGlWK1IeJWXCJJKJKwppLWNKJknp%2BJhTJWkVZ6NZAA5WQBOVl3fGU/EIoWkxysxGsq5iokAMSJPwxUrWWN%2BgrWWBoAR2ygASgBJQIAFQgDFChAUkz2MIl2NxsWI/gIVAg8pIOyOqmMAWAxgAbmJXJhjKsYehjIlgAF0CBYY4GPGCDTzQVLZN9nDcfGfridvxiBBEgAvEMEHZ4FHIwmqisoxw7M0WggKHYAeh2kgztbwq1FcIzmOzttzedxwOqO2ImFb%2B2RXp9mD9gbcIfu91TIUt6/Wkbw0cw6DxkR2GlUCtrY6vOJz9qvC99AaDa/WG%2BbCh3az3B6Pc89TG9R8V2DUNX3WTdtzAr8oxjFErjWbBO0zYc7Rua8dkdZ1XUVFYYQ/MVIWheFpw/GFEW7LNbzQ7N0WRG8RzvDCnUEbD8XjRN8QolDRxxTCWLdfE5Q9EFaCoJ9V1A8NjFcAF9xjONbUTW1kzFCCWy4%2BjULzAsizwUtjHLSs/xrLMjIORs1NbDsu2Q3sVn7Qcs00nixwnYgpxnKsITEMTgJfOlwPfT9pNkn9j1Pc9kPQscqPQkTfOfUCArWSzgpkmDDy8%2BLxJAz9UqgkKMt/BDLiQy8bS068%2BJdATqVw/DiQhKFYThEikS42KaLoiqXOq1jqUUokNJ6xi%2BtqoT3IXPzJIjdK5MPBSEyTFN32GzqcR0ksyzrYzbPrCz33bTsuLshyMSckbqKvNyPNnVF/29aa8qCgq5rC1YTzPC8Lui5zGLzKbEuetMWzS0LYL/QGJOBrdQde8HMu%2BBCyou9axzGnC8JpQiWrasiOoYq69lo7jRuYmrFUGwbOMzJVbmdf9/AgRyXOMOFCANQQIC5a0HyXHKQy5b8Ifu%2BIAHcIEa9EKJct7YLZjmuZ57zRIF4whblxHRdQCWpZlxjNaPBWCE5ghud5gC1Y1hHiuRcXJZJZWAFodnJVU6aJ43TYgLhIgtwD%2Bem33ha1u2dYd12YX1onDZ2L2ud961sqDyJCvm22MPDxquCj2mDZtuP2ZNhO/YetXg9jv97ez0uXbdtVWaL721hWf3F2XRKW5DjPq5JNYuGjvNY/js2W6Tny1a7yvtd1vuB7zmOC5HiAx7L6ap4Lqus771udjrhfG8Vs3Ii7MugMSk/u683udkiNYOvzorC6PiAT/H1Xpsv6ew9n2/74XoeS8m5czfmvC%2Bkg07vRnhHUB%2B93a3EPsXM2XAVjKz5h3CSKChZPy3r/FB0sAG4mHsA5BqD34JUwagyBIsf4R3wYPIhQCX5YLbkHKh39M54LIXvV2B9GLL1wqXdBatBFX1wRHXCud4GLyfgImEpdk6JVERwm%2BkiGE4mIS/QRrClHyOoaHThEj5HWjgQ3fhJCIAwhQW3c%2BEkrErDEdAxqVj57SMAbIix9jyFq3sfonu28dguPUTsTRSDLHWLAXYlBfjr4BK8Tw%2BuewEGMX1EaU0PNCE4lSSaH2ftMm6kNDkse%2BTsmmjfiUwppoWEVLSZLYxNScleL4UTacBA5gMFPAfWiHBpi0E4DCXgngOBaFIKgTgDYFCzHmJgPE/deAEE0D06YABrEAaw1inHWVs7ZOyYh9I4JIQZizRmcF4AoEAGhSALOGT00gcBYBIDQCwWIdBwjkEoE8l59AIjIC2IYP0BBiAyWWXwOgBBwjnIgCEY5W5mDEAAJ6cB4KQWF1R4UAHkQjaEwNYJFvAnlsEEOihgtBEU3NIFgEIrhgCODELQc53BeBYCOEYcQ5L8DTmsHgf0M5jlQhxa4cFxznSlGObQPAIRiBoucFgY5gK8AsDxaQHlxAQgJEwIiTALLgDiqMIs6YVADDAAUAANTwJgMW6LYiMCVfwQQIgxDsEaHa%2BQSg1DHN0FwfQ/yQCmGMOYcVIRzmQGmKgWI5QAScCdu8OcyB1h71oCwXgqAVVOiwMG5mTQcURvsAwJwLh6h6F8P4ToBRuheviIkCNgwGiZCrckMYXQIhessNmlo/RagFqGFmrlFQO2NrLc2iwHaa16BGDUAdEwB4zDmAsCQvT%2BlHPJWMjgOxVBckiE7E%2BQIDBGEbIC4F1oIC4EIB6e4A95n6pWWszZkgrFrF5OiDQXJ0TokiBodEbJ9CcEOaQIZIyV1nIuVc/VdyYCIBALMAgsRBXvIgJ815xBAisEWOuzd26/l7ogAehgyzJi8EPKetNegXUOvEM62QigVDqHJZ60gYspWxDxQujgAy/3HJXeiwVMHyyoCoGujdW7JA7v%2BfuoFuGj3OGeYh2ZF6QM3MmNeu%2BmyyQwjZLyGE6IuS8g0Hsn9S6AOnIsMB65WhFPfo4CsAzyajOmaWcqiFyQQCSCAA%3D%3D%3D)
Note that due to printing method, most significant bits are to the right
If you try and set an unsigned _BitInt of 128 bits or higher to its maximum value, through a double, you begin to get incorrect values.
`unsigned _BitInt(128) max_value_128_unsigned = pow(2, 128) - 1;` gives you 0
Both `unsigned _BitInt(256) max_value_256_unsigned = pow(2, 256) - 1;` and `unsigned _BitInt(512) max_value_512_unsigned = pow(2, 512) - 1;` appear to give you half the expected value (in the reproducer, the most significant hex digit is 7 rather than F).
replacing the call to pow with a -1 gives the correct value. It seems to be to do with the cast from double, and not just the pow function.
Replacing the call to `pow(2,128)` with
```
double getMax128BitAsDouble(){
return 340282366920938463463374607431768211456.0;
}
```
Still results in `max_value_128_unsigned` being 0
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs