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
