The following code is miscompiled by clang-trunk at -O3 in 32-bit mode on x86_64-linux-gnu. $: clang-trunk -v clang version 3.9.0 (trunk 268870) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/bin Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9 Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.3 Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.3.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4.7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.3 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.3.0 Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.6.3 Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.7.4 Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.8.2 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64 $: $: clang-trunk -O3 -m32 small.c $: ./a.out Floating point exception (core dumped) $: clang-trunk -O2 -m32 small.c $: ./a.out $: cat small.c int a, i; unsigned short b, c = 4, d = 5, e, f, g; long long h; void fn1() { int j = 0; for (; a;) L1:; unsigned char k = e; if (f) { L2: h = b % h & k; goto L1; } int l = j; int m = ~i * d; j = ~(g || d) ^ d >> (h && c) * m; e = (d || m) + d; d = ~ - (d && m >> i) & ~(j && (l || h)); if (!(d < c)) goto L2; } int main() { fn1(); return 0;} $:
Bisect points to r267809: Author: Mitch Bodart <mitch.l.bodart@intel.com> Date: Wed Apr 27 22:52:35 2016 +0000 [X86] Enable the post-RA-scheduler for clang's default 32-bit cpu. For compilations with no explicit cpu specified, this exhibits nice gains on Silvermont, with neutral performance on big cores. Differential Revision: http://reviews.llvm.org/D19138 Mitch, can you please take a look?
*** Bug 27804 has been marked as a duplicate of this bug. ***
I can't reproduce this on 3.9 or trunk. Was it fixed?
Yep - this was fixed with: https://reviews.llvm.org/rL270935
*** Bug 27580 has been marked as a duplicate of this bug. ***