mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-04 07:32:13 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222505 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
361eafaffa
commit
ed46a2c2aa
@ -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;
|
||||
|
@ -32,6 +32,7 @@ add_llvm_unittest(SupportTests
|
||||
ScaledNumberTest.cpp
|
||||
SourceMgrTest.cpp
|
||||
SpecialCaseListTest.cpp
|
||||
StreamingMemoryObject.cpp
|
||||
StringPool.cpp
|
||||
SwapByteOrderTest.cpp
|
||||
ThreadLocalTest.cpp
|
||||
|
30
unittests/Support/StreamingMemoryObject.cpp
Normal file
30
unittests/Support/StreamingMemoryObject.cpp
Normal file
@ -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));
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user