Issue 134222
Summary Incorrect float conversion via __bf16 at -O0
Labels new issue
Assignees
Reporter PenXLa
    # Description

When compiling with clang++ at -O0, a float -> __bf16 -> float conversion using a templated static_cast chain produces an incorrect result (0.0f instead of the expected value). This issue disappears when optimization is enabled (-O1 or higher).

# Reproduction:

Compile the following code with: `clang++ filename.cpp`

```cpp
#include <iostream>

template<typename D, typename S> D fp_cast(S x) {
    return static_cast<D>(x);
}

float do_cast(float x) {
    return fp_cast<float>(fp_cast<__bf16>(x));
}

int main() {
 float t0 = 3.f;
    float t2 = do_cast(t0);
    std::cout << t2 << std::endl;
    return 0;
}
```

*Expected behavior*: `do_cast(3.f)` should return `3.0f`.

*Actual behavior*: It returns `0.0f`.

# Environment

```txt
Ubuntu clang version 20.1.0 (++20250221063304+dc1bd6a8fa6a-1~exp1~20250221183420.63)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-20/bin
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to