[LLVMdev] The Next Win32 File System Problem

Jeff Cohen jeffc at jolt-lang.org
Sat May 6 19:52:39 PDT 2006


Fixed.

Jeff Cohen wrote:
> Yep, you found another bug.  Unlike Unix, Windows does not allow a 
> file to be implicitly replaced via renaming.  I'll fix it.
>
> Greg Pettyjohn wrote:
>> Fixing one bug uncovers the next one...
>>
>> To reproduce:
>>  llvm-ar  rc ./libgcc.a libgcc/./_muldi3.o <and-lots-more-.o-files...>
>>
>> The result:
>>   C:\msys\1.0\home\llvm_home\install\bin\llvm-ar.exe: Can't move 
>> './libgcc.a-000003' to './libgcc.a-000002': Cannot create a file when 
>> that file already exists.
>>
>> So apparently, we're trying to move one file on top of another.
>>
>> The error is generated in:
>>
>> Path::renamePathOnDisk(const Path& newName) {
>>   if (!MoveFile(path.c_str(), newName.c_str()))
>>     ThrowError("Can't move '" + path +
>>                "' to '" + newName.path + "': ");
>>   return true;
>> }
>>
>> I'm guessing that the last part of the error message ("Cannot create a
>> file when that file already exists") is the result of a GetLastError() ?
>>
>> Here's a stack trace just before the exception is thrown:
>> Breakpoint 1, llvm::sys::Path::renamePathOnDisk(llvm::sys::Path 
>> const&) (
>>     this=0x22fc00, newName=@0x22fd20)
>>     at
>> C:/msys/1.0/home/llvm_home/llvm-build/../llvm/lib/System/Win32/Path.inc:685 
>>
>> 685       if (!MoveFile(path.c_str(), newName.c_str()))
>> (gdb) n
>> 686         ThrowError("Can't move '" + path +
>> (gdb) bt
>> #0  llvm::sys::Path::renamePathOnDisk(llvm::sys::Path const&)
>> (this=0x22fc00,
>>     newName=@0x22fd20)
>>     at
>> C:/msys/1.0/home/llvm_home/llvm-build/../llvm/lib/System/Win32/Path.inc:686 
>>
>> #1  0x004871c3 in llvm::Archive::writeToDisk(bool, bool, bool)
>> (this=0x3d5110,
>>     CreateSymbolTable=true, TruncateNames=false, Compress=false)
>>     at
>> C:/msys/1.0/home/llvm_home/llvm-build/../llvm/lib/Bytecode/Archive/ArchiveWriter.cpp:461 
>>
>> #2  0x00403d4d in doReplaceOrInsert() ()
>>     at
>> C:/msys/1.0/home/llvm_home/llvm-build/../llvm/tools/llvm-ar/llvm-ar.cpp:645 
>>
>> #3  0x004042b5 in main (argc=64, argv=0x3d4ca0)
>>     at
>> C:/msys/1.0/home/llvm_home/llvm-build/../llvm/tools/llvm-ar/llvm-ar.cpp:704 
>>
>> (gdb)
>>
>>
>> So how to fix this?:
>> 1. These are both temp files right? Why are we trying to overwrite an
>> existing file during a MoveFile? Can we just choose a different temp 
>> file
>> name that doesn't exist yet?
>>
>> 2. Is it deliberate? Should we be deleting the target file and then
>> performing the MoveFile?
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>
>>   
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>




More information about the llvm-dev mailing list