https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117132
Bug ID: 117132 Summary: A call to a function which returns a wider result can be considered a sibling call Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: lh_mouse at 126 dot com Target Milestone: --- (https://godbolt.org/z/besjxE9Pc) ``` extern long real_foo(long x, long y); int my_foo_x_y(int x, int y) { return real_foo(x, y); } int my_foo_x(int x) { return real_foo(x, x); } ``` GCC: ``` my_foo_x_y: sub rsp, 8 movsx rsi, esi movsx rdi, edi call real_foo add rsp, 8 ret my_foo_x: movsx rdi, edi sub rsp, 8 mov rsi, rdi call real_foo add rsp, 8 ret ``` Clang: ``` my_foo_x_y: movsxd rdi, edi movsxd rsi, esi jmp real_foo@PLT my_foo_x: movsxd rdi, edi mov rsi, rdi jmp real_foo@PLT ``` The call to `real_foo` returns a wider result than `my_foo_x` but both are clearly sibling calls.