<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60695>60695</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
if statements not cleanly short-circuiting on Apple Silicon with optimizations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mckib2
</td>
</tr>
</table>
<pre>
- x-ref https://github.com/boostorg/math/pull/945
Overflows are reported for `-O2` and `-O3` due to evaluation of unsafe calculations in if-statements that should have been guarded by a previous condition short-circuiting. We only observe this on certain versions of MacOS, e.g., Monterrey 12.6.
Reproducer:
```cpp
// main.cpp
#include <iostream>
#include <limits>
#include <cfenv>
int main(int argc, char** argv) {
if (argc != 2) {
return 1;
}
const double x = std::atof(argv[1]);
double f1 = std::numeric_limits<double>::max();
double res;
if((x < 1) && (std::numeric_limits<double>::max() * x < f1)) {
std::cout << "if branch\n";
} else {
std::cout << "else branch\n";
}
if(std::fetestexcept(FE_OVERFLOW)) {
std::cout << "overflow reported\n";
} else {
std::cout << "overflow not reported\n";
}
return 0;
}
// output:
// else branch
// overflow reported
```
Build:
```bash
clang++ -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk -O2 -std=gnu++14 main.cpp
```
Run:
```bash
./a.out 42.0
```
Version information:
```
% clang++ --version
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVt1u2zgTfRr6ZiBBGsmKfeGLJK6AD1-LAG3R7l1BkSOLW4oU-OMk-_QLSk7qOG13A6wQSOHM8AzPoTlD7r06GKIdW9-w9X7FYxis243iu-pw1Vn5uMvgIXPUwxDC5Fl1zbBl2B5UGGKXCzsybDtrfbDuwLAdeRgYtlPUmmG7rdes2LPiennfHcn12t574I7A0WRdIAm9dcCaIrtD1hTAjVxGVRrJSBAs0JHryIOyBmwP0XjeEwiuRdSz1YMyoPrMBx5oJBM8hIEH8IONWsLAjwQdkYFD5E6ShO4ROEyOjspGD8IaqWZ0P1gXMqGciCooc8gBvhJYox_Bdp7ckSAMyoM1IMgFrgwcyfl5CbaHD1zcfWJ4C5Qf8vT9YE0g5-gRSsyb_FyNjzQ5K6Mgl1RdHE2x_IlpOllmtWHkyuRnxkoZoaMkYNWtsj444iOr3v3MrdWogv-FU_Rkjj9881uZMOdjuEn_cncQiYkYuGN4zfA6mY4Mt8CubpYpAACqB4abFA0MS1btAV_FpMdRiM5AyaozB7vanwbCGh9A2thpggdIOD7IpFB1zYPtlxxHtr4p2XrPcPsC5zSvL19ONHEkp8S3Jy1ul7hEfPaP_IHh5hdgjvwLs-rn2E1a3C2UM0lsGDaJ_9tTQlJ0weoT2E9Fe4YVNoYUm8IZouqhc9yIga1vDUO8FBVIe_r3cHP0LwCft-hCiWesngL5QA-CpsBw0777dvfl3cf2_d3Xt7KypzrxXCL-G3bPsMaGf4K-pHr61RbPcRcxp3NqY5hi-HGeF-u5rOf29Lzm-rISnCe5iUrL18Wi4_6EKzQ3B4Y3DG8gO0DGnRiAu7GpIVP-0TtrAzBs36vOcffIsN3TkbSdyDFsb-04ciPfK0OfrdWeYftp___0mcvaHyXmVe7ld8juELJZ5f3BxCVfWV8WqZ8x-BjN79afM2x5nnatxrz4Dc6XpeaCMr1149wCXuM-ab2GF7pkp4K9uK-nSdMS8FTJoazzIi_ScZ7tWVkXRV7kuM3LIhW1ZeZn7g6U9npROOMJKZPc3SuDZd48Efg8OOISRitJp-jJevWwuP5nfOBak9yr1ATetDXRJ0enzAXrldxVcltt-Yp2ZXPVYF1sq2o17Hq86utalmVRyqu-lrUsqSt4sxF9w0usV2qHBVYFloiIm3WVN1W9qXCD3ZqXtO0EqwsaudK51scxt-6wUt5H2jVFs12vNO9I-_kmgWjoHmZnOlvr_crt0pysiwfP6kIrH_wPlKCCpp3q4ax9pzMqNPHUeS-bcuq-y759UloJa-BehQHsFNSo_louBKvo9O43d5aU_PTJJmf_JBEYtvOSk7ozpb8DAAD__1xmo7Q">