[llvm] r222505 - Fix a silly bug in StreamingMemoryObject.cpp.
David Blaikie
dblaikie at gmail.com
Thu Nov 20 21:30:35 PST 2014
Naively this sound unit testable, perhaps?
On Nov 20, 2014 9:20 PM, "Rafael Espindola" <rafael.espindola at gmail.com>
wrote:
> Author: rafael
> Date: Thu Nov 20 23:15:41 2014
> New Revision: 222505
>
> URL: http://llvm.org/viewvc/llvm-project?rev=222505&view=rev
> Log:
> Fix a silly bug in StreamingMemoryObject.cpp.
>
> The logic for detecting EOF was wrong and would fail if we ever requested
> more than 16k past the last read position.
>
> Added:
> llvm/trunk/unittests/Support/StreamingMemoryObject.cpp
> Modified:
> llvm/trunk/include/llvm/Support/StreamingMemoryObject.h
> llvm/trunk/unittests/Support/CMakeLists.txt
>
> Modified: llvm/trunk/include/llvm/Support/StreamingMemoryObject.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/StreamingMemoryObject.h?rev=222505&r1=222504&r2=222505&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/StreamingMemoryObject.h (original)
> +++ llvm/trunk/include/llvm/Support/StreamingMemoryObject.h Thu Nov 20
> 23:15:41 2014
> @@ -65,19 +65,20 @@ private:
> // Most of the requests will be small, but we fetch at kChunkSize bytes
> // at a time to avoid making too many potentially expensive GetBytes
> calls
> bool fetchToPos(size_t Pos) const {
> - if (EOFReached) return Pos < ObjectSize;
> + if (EOFReached)
> + return Pos < ObjectSize;
> while (Pos >= BytesRead) {
> Bytes.resize(BytesRead + BytesSkipped + kChunkSize);
> size_t bytes = Streamer->GetBytes(&Bytes[BytesRead + BytesSkipped],
> kChunkSize);
> BytesRead += bytes;
> - if (BytesRead <= Pos) { // reached EOF/ran out of bytes
> + if (bytes != kChunkSize) { // reached EOF/ran out of bytes
> ObjectSize = BytesRead;
> EOFReached = true;
> - return false;
> + break;
> }
> }
> - return true;
> + return Pos < BytesRead;
> }
>
> StreamingMemoryObject(const StreamingMemoryObject&)
> LLVM_DELETED_FUNCTION;
>
> Modified: llvm/trunk/unittests/Support/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/CMakeLists.txt?rev=222505&r1=222504&r2=222505&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/Support/CMakeLists.txt (original)
> +++ llvm/trunk/unittests/Support/CMakeLists.txt Thu Nov 20 23:15:41 2014
> @@ -32,6 +32,7 @@ add_llvm_unittest(SupportTests
> ScaledNumberTest.cpp
> SourceMgrTest.cpp
> SpecialCaseListTest.cpp
> + StreamingMemoryObject.cpp
> StringPool.cpp
> SwapByteOrderTest.cpp
> ThreadLocalTest.cpp
>
> Added: llvm/trunk/unittests/Support/StreamingMemoryObject.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/StreamingMemoryObject.cpp?rev=222505&view=auto
>
> ==============================================================================
> --- llvm/trunk/unittests/Support/StreamingMemoryObject.cpp (added)
> +++ llvm/trunk/unittests/Support/StreamingMemoryObject.cpp Thu Nov 20
> 23:15:41 2014
> @@ -0,0 +1,30 @@
> +//===- llvm/unittest/Support/StreamingMemoryObject.cpp - unit tests
> -------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/Support/StreamingMemoryObject.h"
> +#include "gtest/gtest.h"
> +
> +#include <string.h>
> +
> +using namespace llvm;
> +
> +namespace {
> +class NullDataStreamer : public DataStreamer {
> + size_t GetBytes(unsigned char *buf, size_t len) override {
> + memset(buf, 0, len);
> + return len;
> + }
> +};
> +}
> +
> +TEST(StreamingMemoryObject, Test) {
> + auto *DS = new NullDataStreamer();
> + StreamingMemoryObject O(DS);
> + EXPECT_TRUE(O.isValidAddress(32 * 1024));
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141120/1ee69b53/attachment.html>
More information about the llvm-commits
mailing list