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

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Nov 20 21:36:45 PST 2014


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 :-)

> 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



More information about the llvm-commits mailing list