https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109442
--- Comment #17 from AK <hiraditya at msn dot com> --- With recent changes in libc++ (https://reviews.llvm.org/D147741) clang optimizes away the new-delete pair. https://godbolt.org/z/a6PG54Pvb $ clang++ -O3 -stdlib=libc++ -fno-exceptions vat1(std::__1::vector<int, std::__1::allocator<int> >): # @vat1(std::__1::vector<int, std::__1::allocator<int> >) sub rsp, 24 xorps xmm0, xmm0 movaps xmmword ptr [rsp], xmm0 mov qword ptr [rsp + 16], 0 mov rax, qword ptr [rdi + 8] sub rax, qword ptr [rdi] je .LBB0_2 js .LBB0_3 .LBB0_2: mov eax, 10 add rsp, 24 ret .LBB0_3: mov rdi, rsp call std::__1::vector<int, std::__1::allocator<int> >::__throw_length_error[abi:v170000]() const .L.str: .asciz "vector" .L.str.1: .asciz "length_error was thrown in -fno-exceptions mode with message \"%s\"" Previously clang couldn't even convert the copy to a memmove and would generate a raw loop e.g., https://godbolt.org/z/G8ax1o5bc .LBB0_6: # =>This Inner Loop Header: Depth=1 movups xmm0, xmmword ptr [r15 + 4*rdi] movups xmm1, xmmword ptr [r15 + 4*rdi + 16] movups xmmword ptr [rax + 4*rdi], xmm0 movups xmmword ptr [rax + 4*rdi + 16], xmm1 add rdi, 8 cmp rsi, rdi jne .LBB0_6 cmp rbx, rsi jne .LBB0_8 jmp .LBB0_9 .LBB0_3: