<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107607>107607</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] Miscompilation on rv64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mikhailramalho
</td>
</tr>
</table>
<pre>
The following program miscompiles when using clang++ for rv64:
```
$ cat foo.cpp
#include <cmath>
int main() {
long double y = NAN;
_Float16 a = static_cast<_Float16>(y);
return (a != a);
}
```
The cast of `NAN` from `long double` to `_Float16` generates `0`, instead of `NAN`.
It only happens with clang++ in rv64. It works just fine in intel 64 and rv32. Compiling with g++ for rv64 also works.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsU8GOozoQ_Jrm0hpkGmLCgcMkeZHm8Obw3mqvI8cY8IyxkW0S5e9XJpnZzGolBOouuii6yiIEPVilWtjsYHPIxBJH59tJf4xCGy8mYUaXnVx3bX-MCntnjLtoO-Ds3eDFhJMO0k2zNirgZVQWl5BgaYQdgHZAO-ydR3_mFZTPwA7AnoGz-3UrqUIpIvbO5XKe8bNbaivN0imEci8nEUco_7lj613biJPQFmgL1CDUu1sf0Tg7YOeWk1F4RSgP-Pr8CuUX_nY0TsSCo1jBEEXU8k2KEKHcf4Lpa7S9AjUPk17FxVsE2goEKtK0eHwD6sNf_zEtL_Gj6xE4S3I4w967KZUPelM7utT80sEZDsoqL6IKCVhZaY_ahqhE940yf1zQS0RnzRVHMc_KBrzoOH5zRtvVmBxfIl6c_wj4voSIvbYqYdpGZZBXKGyH_lxSjvvV6-TwSvanxShMcDequ5Ksa8uuKRuRqbaoacOromY8G9uaUVVWRc9VU3WnU1HXbEslY52URc3YNtMtMapYw3jBNxu2yUteUa24bETVyJI4VExNQpvcmPOUOz9kOoRFtQWrOaszI07KhDXYRFZdcEWBKOXct2no6bQMASpmdIjhN03U0awn4r-X__c_YXPAfz9TLqJ2Ft1tb9niTTvGOIcUbToCHQcdx-WUSzcBHRPh_fE0e_euZAQ6rjIC0PGu89zSrwAAAP__IH0Mkg">