https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58483
--- Comment #16 from dennis luehring <dl.soluz at gmx dot net> --- the sample still gets reduced by clang to 160 with -O2 or -O3 clang: main: # @main mov eax, 160 ret and gcc 11.2/trunk producing -O2 main: push rbp mov edi, 12 sub rsp, 48 movq xmm15, QWORD PTR .LC0[rip] mov DWORD PTR [rsp+8], 30 movq QWORD PTR [rsp], xmm15 pxor xmm15, xmm15 mov QWORD PTR [rsp+32], 0 movaps XMMWORD PTR [rsp+16], xmm15 call operator new(unsigned long) mov rcx, QWORD PTR [rsp] lea rdx, [rax+12] lea rdi, [rsp+16] mov QWORD PTR [rsp+16], rax mov QWORD PTR [rsp+32], rdx mov QWORD PTR [rax], rcx mov ecx, DWORD PTR [rsp+8] mov QWORD PTR [rsp+24], rdx mov DWORD PTR [rax+8], ecx call std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [base object destructor] add rsp, 48 mov eax, 160 pop rbp ret mov rbp, rax jmp .L5 main.cold: .LC0: .long 10 .long 20 -O3 main: sub rsp, 24 mov edi, 12 movq xmm15, QWORD PTR .LC0[rip] mov DWORD PTR [rsp+8], 30 movq QWORD PTR [rsp], xmm15 call operator new(unsigned long) mov esi, 12 mov rdi, rax mov rax, QWORD PTR [rsp] mov QWORD PTR [rdi], rax mov eax, DWORD PTR [rsp+8] mov DWORD PTR [rdi+8], eax call operator delete(void*, unsigned long) mov eax, 160 add rsp, 24 ret .LC0: .long 10 .long 20 does that mean its still not clear if the unused new/delete can be removed here?