https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47253
Jan Schultke <janschultke at googlemail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |janschultke at googlemail dot com --- Comment #8 from Jan Schultke <janschultke at googlemail dot com> --- Another repro: https://godbolt.org/z/K4zc6GMjY Given the code: > void t(), f(); > > void decide(bool ok) { > if (ok) { > t(); > } else { > f(); > } > } GCC emits: > decide(bool): > test dil, dil > je .L2 > jmp t() > .L2: > jmp f() This contains a je to a jmp instruction, which is obviously redundant. The expected output (Clang, MSVC) is: > decide(bool): > test edi, edi > je f()@PLT > jmp t()@PLT