[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