Issue 140534
Summary Clang 19 regression: SIGFPE on -O2
Labels clang
Assignees
Reporter roe85
    I tried compiling our codebase and I get SIGFPE in a innocent looking function. 
I've added `noinline`, to isolate it further. When called deep in the call tree it crashes with SIGFPE (which should be impossible with the given datatypes) 
If I call it in an isolated unit-test with the very same parameters `(3,0, 200)` it works as expected

```
[[clang::noinline]]
/*static*/ bool SomeClass::checkIfObjTooBig(uint size_radial, uint size_azimuthal, uint max)
{
    return (size_azimuthal > sqrt(2) * max ||
 size_radial > sqrt(2) * max);
}
```
The generated Assembly with the supposed crash location.

```
mov    %esi,%eax
cvtsi2sd %rax,%xmm0
mov %edx,%eax
cvtsi2sd %rax,%xmm1
mulsd  0x2eb12(%rip),%xmm1        # 0x57bfb8
mov    %edi,%eax
cvtsi2sd %rax,%xmm2
movapd %xmm1,%xmm3
cmpltpd %xmm2,%xmm3       #<- Supposedly SIGFPE happens here
cmpltpd %xmm0,%xmm1
orpd   %xmm3,%xmm1
movd   %xmm1,%eax
and $0x1,%al
retq
```
Command line parameters:
```
-D_REENTRANT -m64 -march=x86-64 -pipe -fno-strict-aliasing  -O2 -g -DNDEBUG -std=c++14 
```

Could it be that some (parts of) registers are polluted and not really cleared beforehand? 
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to