[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