https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98985
Bug ID: 98985
Summary: libstdc++: filesystem::rename not overwriting files on
Windows
Product: gcc
Version: 10.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: m.heinzler at heinzler dot de
Target Milestone: ---
Created attachment 50139
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50139&action=edit
Proposed fix
filesystem::rename must replace existing files and currently does so on most
platforms by simply calling posix::rename. But on Windows (specifically MinGW),
posix::rename refers to Microsoft's MSVCRT which does not overwrite files.
See:
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/rename-wrename?view=msvc-160
I attached a patch that falls back to the WinAPI in this case and tested it
successfully. This is also how Microsoft implements filesystem::rename.
As I'm not familiar with the codebase I wasn't able to add a simple test case
for this. If someone could give me a hint which files to touch I could also
work on that.