https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64243
--- Comment #5 from Uroš Bizjak <ubizjak at gmail dot com> --- This is fixed in gcc-11: --cut here-- struct TestFloat { float x; }; struct TestDouble { double x; }; struct TestFloat foo (struct TestFloat x) { return x; } struct TestDouble bar (struct TestDouble x) { return x; } --cut here-- gcc -O2: foo: movl %ecx, %eax ret bar: movq %rcx, %rax ret