https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116868
Bug ID: 116868 Summary: GCC trunk doesn't eliminate a superfluous new/delete pair Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: dccitaliano at gmail dot com Target Milestone: --- Maybe this is known, but i wasn't able to find the exact duplicate. (this is the closest I found -- apologies for the churn, if any) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78104 https://godbolt.org/z/579rGG95z #include <vector> int sumVector() { const std::vector<int> vec = {1}; int sum = 0; for (int i = 0; i < vec.size(); i++) { sum += vec[i]; } return sum; } At -O3 emits: sumVector(): sub rsp, 8 mov edi, 4 call operator new(unsigned long) mov esi, 4 mov DWORD PTR [rax], 1 mov rdi, rax call operator delete(void*, unsigned long) mov eax, 1 add rsp, 8 ret I'd expect to emit something like (clang does it): sumVector(): mov eax, 1 ret