https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86400
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
# /home/jwakely/gcc/9/include/c++/9.0.0/bits/basic_string.h:236:
_M_construct(__beg, __end, _Tag());
.loc 3 236 11 is_stmt 0
movl $_ZZ4foo2vE4root, %edx #,
movq %rdx, %rsi #,
movq %rsp, %rdi #,
.LEHB0:
call
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag
#
The output of -fdump-tree-optimized:
<bb 2> [local count: 8687547398]:
MEM[(struct &)&d] ={v} {CLOBBER};
MEM[(struct &)&d] ={v} {CLOBBER};
MEM[(struct &)&d + 8] ={v} {CLOBBER};
MEM[(struct _Rb_tree_header *)&d + 8B]._M_header._M_color = 0;
MEM[(struct _Rb_tree_header *)&d + 8B]._M_header._M_parent = 0B;
MEM[(struct _Rb_tree_header *)&d + 8B]._M_header._M_left = &MEM[(struct
_Rb_tree_header *)&d + 8B]._M_header;
MEM[(struct _Rb_tree_header *)&d + 8B]._M_header._M_right = &MEM[(struct
_Rb_tree_header *)&d + 8B]._M_header;
MEM[(struct _Rb_tree_header *)&d + 8B]._M_node_count = 0;
MEM[(struct _Rb_tree_const_iterator *)&__position] = &MEM[(struct _Rb_tree
*)&d]._M_impl.D.30202._M_header;
MEM[(struct &)&D.38131] ={v} {CLOBBER};
MEM[(struct &)&D.38131] ={v} {CLOBBER};
MEM[(struct _Alloc_hider *)&D.38131]._M_p = &D.38131.D.18738._M_local_buf;
iftmp.26_33 = &root;
std::__cxx11::basic_string<char>::_M_construct<const char*> (&D.38131, &root,
iftmp.26_33, D.38135);
iftmp.26_33 is the __end argument, and is set to the same value as __beg.