[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