https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103733
--- Comment #2 from Jan Engelhardt <jengelh at inai dot de> --- == New input == $ cat x.cpp struct S { char b[16]; #if __cplusplus >= 202000L bool operator==(const S &) const = default; #else inline bool operator==(const S &o) const { return __builtin_memcmp(b, o.b, sizeof(b)); } #endif }; bool fff(const S &a, const S &b) { return a == b; } == Observed == $ ./xgcc -B. -c /dev/shm/x.cpp -O2 && objdump -d x.o 0000000000000000 <_Z3fffRK1SS1_>: C++17 0: 48 8b 17 mov (%rdi),%rdx 3: 48 8b 47 08 mov 0x8(%rdi),%rax 7: 48 33 16 xor (%rsi),%rdx a: 48 33 46 08 xor 0x8(%rsi),%rax e: 48 09 d0 or %rdx,%rax 11: 0f 95 c0 setne %al 14: c3 ret 0000000000000000 <_Z3fffRK1SS1_>: C++20 0: 31 c0 xor %eax,%eax 2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 8: 0f b6 14 06 movzbl (%rsi,%rax,1),%edx c: 38 14 07 cmp %dl,(%rdi,%rax,1) f: 75 17 jne 28 <_Z3fffRK1SS1_+0x28> 11: 48 83 c0 01 add $0x1,%rax 15: 48 83 f8 10 cmp $0x10,%rax 19: 75 ed jne 8 <_Z3fffRK1SS1_+0x8> 1b: b8 01 00 00 00 mov $0x1,%eax 20: c3 ret 21: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 28: 31 c0 xor %eax,%eax 2a: c3 ret