r234202 - MSan told me that we actually dump the entire scratch buffer into PCH files, initialize it.
David Blaikie
dblaikie at gmail.com
Mon Apr 6 13:09:56 PDT 2015
On Mon, Apr 6, 2015 at 1:01 PM, Benjamin Kramer <benny.kra at googlemail.com>
wrote:
> Author: d0k
> Date: Mon Apr 6 15:01:49 2015
> New Revision: 234202
>
> URL: http://llvm.org/viewvc/llvm-project?rev=234202&view=rev
> Log:
> MSan told me that we actually dump the entire scratch buffer into PCH
> files, initialize it.
>
> Writing 4k of zeros is preferrable to 4k of random memory. Document that.
> While
> there remove the initialization of the first byte of the buffer and start
> at
> index zero. It was writing a literal '0' instead of a null byte at the
> beginning anyways, which didn't matter since we never read it.
>
Wonder if we could just get smarter about writing it out - only writing the
needed bytes (ones that have been initialized) - should be relatively easy,
unless we leave holes in it? (& if we need the rest of the zeros, either
just resizing the file, or writing zeros right to the file without writing
them to this buffer first might be do-able)
>
> Modified:
> cfe/trunk/lib/Lex/ScratchBuffer.cpp
>
> Modified: cfe/trunk/lib/Lex/ScratchBuffer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ScratchBuffer.cpp?rev=234202&r1=234201&r2=234202&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Lex/ScratchBuffer.cpp (original)
> +++ cfe/trunk/lib/Lex/ScratchBuffer.cpp Mon Apr 6 15:01:49 2015
> @@ -64,12 +64,13 @@ void ScratchBuffer::AllocScratchBuffer(u
> if (RequestLen < ScratchBufSize)
> RequestLen = ScratchBufSize;
>
> + // Get scratch buffer. Zero-initialize it so it can be dumped into a
> PCH file
> + // deterministically.
> std::unique_ptr<llvm::MemoryBuffer> OwnBuf =
> - llvm::MemoryBuffer::getNewUninitMemBuffer(RequestLen, "<scratch
> space>");
> + llvm::MemoryBuffer::getNewMemBuffer(RequestLen, "<scratch space>");
> llvm::MemoryBuffer &Buf = *OwnBuf;
> FileID FID = SourceMgr.createFileID(std::move(OwnBuf));
> BufferStartLoc = SourceMgr.getLocForStartOfFile(FID);
> CurBuffer = const_cast<char*>(Buf.getBufferStart());
> - BytesUsed = 1;
> - CurBuffer[0] = '0'; // Start out with a \0 for cleanliness.
> + BytesUsed = 0;
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150406/3ef26e35/attachment.html>
More information about the cfe-commits
mailing list