https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120871

            Bug ID: 120871
           Summary: missing tail call optimization on RVO
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rockeet at gmail dot com
  Target Milestone: ---

struct Slice {
    const char* data;
    unsigned long size;
    ~Slice();
};
Slice get_s_impl();
Slice get_s() { return get_s_impl(); }

g++ produces:

get_s():
        push    rbx
        mov     rbx, rdi
        call    get_s_impl()
        mov     rax, rbx
        pop     rbx
        ret

icc recognized tail call and produces:

get_s():
..B1.1:                         # Preds ..B1.0
        jmp       get_s_impl()                               #7.24

clang also missed such tail call optimization.

Reply via email to