[llvm] r222505 - Fix a silly bug in StreamingMemoryObject.cpp.

David Blaikie dblaikie at gmail.com
Thu Nov 20 22:53:33 PST 2014


On Nov 20, 2014 9:36 PM, "Rafael EspĂ­ndola" <rafael.espindola at gmail.com>
wrote:
>
> On 21 November 2014 00:30, David Blaikie <dblaikie at gmail.com> wrote:
> > Naively this sound unit testable, perhaps?
>
> The patch has one, so yes :-)

Heh, don't mind me...

>
> > 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/7bf7afed/attachment.html>


More information about the llvm-commits mailing list