https://bugs.kde.org/show_bug.cgi?id=432801
--- Comment #8 from Eyal <eyals...@gmail.com> --- Even vgdb isn't helping me. Here's the code that I'm using: #include <signal.h> #include <string.h> #include <stdio.h> #include <stdlib.h> int main() { struct sigaction act; if (sigaction(SIGTERM, 0, &act) == 1) { return 12; } if (sigaction(SIGTERM, 0, &act) == 1) { return 12; } char pattern[] = "0123456789"; pattern[8] = 0; const unsigned long plen = strlen(pattern); size_t hp=0; for (size_t i = 0; i < plen; ++i) hp += pattern[i]; volatile int j = 0; if (hp==j) { j++; } return 1; } If I switch the pattern[8] with pattern[9] then the output is nearly identical but it fails a memcheck test in valgrind. I used vgdb to step through the code and I'm seeing strange behavior. In the code, there are two instances of movq to an xmm register: 0x00000000004011ff <+191>: je 0x4012c8 <main+392> 0x0000000000401205 <+197>: mov %rbx,%rdi 0x0000000000401208 <+200>: sub %rsi,%rdi 0x000000000040120b <+203>: movq %r8,%xmm0 and 0x00000000004012c8 <+392>: movq %r8,%xmm0 Identical instructions. Depending on the pattern[] line above, either the jump is taken or not. In either case, eventually there is a movq from register r8 into xmm0. In the working case, I see that $r8 is successfully copied into $xmm0 and the vbits are all cleared to 0, as it expected. But in the broken case, the value is not copied and the vbits are wrong, too! It might just be wrong when looking at the result in vgdb because the output is right in the end. If someone can help me debug this, I'm willing to put in some time. -- You are receiving this mail because: You are watching all bug changes.