<div dir="ltr">I just came across this, too. I'm testing this fix:<div><br></div><div>std::copy(ToWide.begin(), ToWide.end(), &RenameInfo.FileName[0]);<br></div><div><br></div><div>which makes the target argument a plain old pointer rather than an array of length 1.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 9, 2017 at 10:13 AM, George Rimar via Phabricator <span dir="ltr"><<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">grimar added inline comments.<br>
<br>
<br>
================<br>
Comment at: llvm/trunk/lib/Support/<wbr>Windows/Path.inc:375<br>
<span class="">+ RenameInfo.FileNameLength = ToWide.size();<br>
+ std::copy(ToWide.begin(), ToWide.end(), RenameInfo.FileName);<br>
</span>+<br>
----------------<br>
This asserts under windows/debug.<br>
`RenameInfo.FileName` here is `WCHAR FileName[1];` and std::copy checks it's size<br>
for overflow and fails:<br>
<br>
```<br>
_Myiter& operator+=(difference_type _Off)<br>
{ // increment by integer<br>
#if _ITERATOR_DEBUG_LEVEL == 2<br>
if (_Size < _Idx + _Off)<br>
{ // report error<br>
_DEBUG_ERROR("array iterator + offset out of range");<br>
_SCL_SECURE_OUT_OF_RANGE;<br>
}<br>
```<br>
<br>
```<br>
template<class _InIt,<br>
class _OutTy,<br>
size_t _OutSize> inline<br>
_OutTy *copy(_InIt _First, _InIt _Last,<br>
_OutTy (&_Dest)[_OutSize])<br>
{ // copy [_First, _Last) to [_Dest, ...)<br>
```<br>
<br>
I would suggest to use memcpy instead.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
Repository:<br>
rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D38570" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D38570</a><br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>