<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85334>85334</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing exception handling codegen for copy constructor of vector even with -fexceptions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
question,
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hiraditya
</td>
</tr>
</table>
<pre>
There is no exception handling for if/when `operator new` fails? gcc generates exception handling code. I'm curious if this is the intended behavior?
Repro: https://godbolt.org/z/hc5PEffK8
```cpp
#include<vector>
#include <ranges>
std::vector<int> td() {
int arr[]{-5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15,-5, 10, 15 -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10,-5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10,-5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10,-5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10,-5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10, 15, -5, 10,};
auto b = std::ranges::begin(arr);
auto e = std::ranges::end(arr);
std::vector<int> dd(b, e);
return dd;
}
```
$ clang++ -O3 -std=c++23 -stdlib=libc++ -g0 -fexceptions
```
td(): # @td()
push r14
push rbx
push rax
mov rbx, rdi
xorps xmm0, xmm0
movups xmmword ptr [rdi], xmm0
mov qword ptr [rdi + 16], 0
mov edi, 444
call operator new(unsigned long)@PLT
mov qword ptr [rbx], rax
lea r14, [rax + 444]
mov qword ptr [rbx + 16], r14
lea rsi, [rip + .L__const.td().arr]
mov edx, 444
mov rdi, rax
call memcpy@PLT
mov qword ptr [rbx + 8], r14
mov rax, rbx
add rsp, 8
pop rbx
pop r14
ret
.L__const.td().arr:
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 10 # 0xa
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
.long 15 # 0xf
.long 4294967291 # 0xfffffffb
.long 10 # 0xa
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1vozgX_jXOzVEiY0MSLrhokon06p3VjlZzPzLYgFdgM7ZJ0_31K0PIlDTZbWe6VWcXVGF6Pnye82VXPcxaWSghEhRtULSbsdaV2iSlNIxL98BmqeYPyedSGAHSgtIgjplonNQKSqZ4JVUBuTYgc0T296VQgJZYN8Iwpw0ocY-WGHImK4voHoosg0IozxX22laZ5mIB_0NkVUPWGqlbCzIHV0rr7btSgFROKC44pKJkB6kNonuEdwjf9e_fRGM0ondQOtdYRO8Q2SOyLzRPdeUW2hSI7P9AZF9m0acPef7_9WNttMT9T9Y0JwqhUmVVywWi24PInLf44ZIHiG4NU4Ww35jd2zruMdC7QXUrlUP0AziOyBqRGNBq04uC9w2YMX0y0GozjxDZQoC7d_f9hpQx4S0tP6ZMRt6fEbTaIXouWtY6DSkguoNzsQ-t4L9TUUiFyNoXNokvFcVtRaH4FbWbDcW9dOpBirEdI1xrlOcPNO_AuN1HZwAJIauYKhDZILKB-a8U5p3ZXdaTSE-oZIrorpJpNkgWGOb5-VyzV0-W_teh_f1JhQgFFOIz6YS7f5rWln41QXiDkR5PjDOFHceitT7AIEq2YLgc84_aNNavdd1lvFt7iVofWs871vW9NhwaZwBFG79FtLuQvbD29UIBfIiC5UnvhpLg0nPD8MLbjFWVX0d3C1m3qrvAOFTa5ytGIf708fNz8KTHE5An0aoEgyHiZNsJs2MH3qOKds_bfeztk-x5I8bKwYBsOvnFxy9fMq2sWwzFsOjugxs2BT9eDZbnmz6QT7wbAlmLOmseXhKvDuH6lkPnGmN9jaUXdhnnPd82nr--KGbdPFXxxKulb4TrCTfiRU89BwtfFgAQkjiMlysSB3D18R2Ij3n_pGNjwx4BPomxG_xo2OY6_5Uw_OUzBvgI2TO0_h72K0XpBVim_E35-xfk70Va78Ht10H-fGTvsnfeqGi_F96U2ved2um-mO6LKX8_FLvn9tfrp-KHojBS_mlLeboopr8BXrf_ftKDZroopvz9M_n7b3s_Ve-Uv-_N33maMuMJ5TGN2UwkwSrAYRRjup6VSRjRWOCYkzzkKceMBZTmeRBwEgYpIeFMJgSTENMgJJRiulrkcb7CIQnFMgyIWGIUYlEzWS2q6lAvtClm0tpWJOuI0nBWsVRUthucE_K1FdZJrRAhiGwRId-GQp4U7WYm8bvM07awKMSVtM5-29dJV4nkF2mtVMWtuXghVDdqz3TzAN0_vU2bOW1A59DPwkAchIJ76crRFGrWmiq5mIZLV7bpItM1InsP47TMG6N_F5lDZN_5ahHZd-7-GQAA__9BYmqU">