[cfe-dev] Help solve bug 17216 for clang-format on Windows

Johan Engelen jbc.engelen at swissonline.ch
Fri Nov 8 10:44:01 PST 2013


Hi Alp,
   I'm sorry I did not follow up on making a test case.
Thanks again for the fix.

regards,
   Johan

On 8-11-2013 9:16, Alp Toker wrote:
> Hello Johan,
>
> I've landed the fix by itself in r194250.
>
> I've discovered that this is a problem that exists in various other bits
> of LLVM and clang, and will be working to fix those uses as well.
>
> You can see the commit message for the full background.
>
> Daniel, let's start looking at the performance issues while we're at it,
> can you review my RewriteBuffer optimisation posted to cfe-commits as a
> starting point?
>
> Alp.
>
> On 01/11/2013 21:12, Johan Engelen wrote:
>> Hello all,
>>    I've been looking into why clang-format cannot write in-place for
>> large files (> 16 kB) on Windows [1].
>> I've found the culprit, but need help actually fixing it; the file
>> handling code is somewhat complex for a new-comer like me. :)
>>
>> The difference between small and large files is the returned value by
>> shouldUseMmap in /llvm/lib/Support/MemoryBuffer.cpp. For small files,
>> shouldUseMmap returns false and the already created normal
>> MemoryBuffer is kept and all is fine. But for larger files,
>> shouldUseMmap returns true and the already created normal MemoryBuffer
>> is destroyed and a new memory mapped one is created. This becomes the
>> OwningPtr<MemoryBuffer> Code memorybuffer in ClangFormat.cpp.
>> Now when the time comes to write the reformatted text in-place to the
>> input file, llvm::raw_fd_ostream FileStream cannot be opened if the
>> MemoryBuffer is a memory mapped one. Apparently Windows does not allow
>> that. For small files, no Mmap buffer was created and all is fine.
>>
>> I do not know nearly enough about the file handling internals to
>> propose a good fix.
>> If shouldUseMmap is modified to always return false, clang-format
>> works fine on large files. But that would be a very course "fix". I
>> wanted to try releasing the Mmap interface to the file, right before
>> writing back to it. But I was not able to figure out how to do that.
>>
>> Thanks for the help,
>>      Johan
>>
>> [1]  http://llvm.org/bugs/show_bug.cgi?id=17216
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev




More information about the cfe-dev mailing list