Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit cc21bbd

Browse files
committed
Remove BitcodeReader::setBufferOwned.
We do have use cases for the bitcode reader owning the buffer or not, but we always know which one we have when we construct it. It might be possible to simplify this further, but this is a step in the right direction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211205 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent ec2d823 commit cc21bbd

File tree

3 files changed

+12
-23
lines changed

3 files changed

+12
-23
lines changed

include/llvm/Bitcode/ReaderWriter.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ namespace llvm {
3030
/// deserialization of function bodies. If successful, this takes ownership
3131
/// of 'buffer. On error, this *does not* take ownership of Buffer.
3232
ErrorOr<Module *> getLazyBitcodeModule(MemoryBuffer *Buffer,
33-
LLVMContext &Context);
33+
LLVMContext &Context,
34+
bool BufferOwned = true);
3435

3536
/// getStreamedBitcodeModule - Read the header of the specified stream
3637
/// and prepare for lazy deserialization and streaming of function bodies.

lib/Bitcode/Reader/BitcodeReader.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3374,16 +3374,15 @@ const std::error_category &BitcodeReader::BitcodeErrorCategory() {
33743374
/// getLazyBitcodeModule - lazy function-at-a-time loading from a file.
33753375
///
33763376
ErrorOr<Module *> llvm::getLazyBitcodeModule(MemoryBuffer *Buffer,
3377-
LLVMContext &Context) {
3377+
LLVMContext &Context,
3378+
bool BufferOwned) {
33783379
Module *M = new Module(Buffer->getBufferIdentifier(), Context);
3379-
BitcodeReader *R = new BitcodeReader(Buffer, Context);
3380+
BitcodeReader *R = new BitcodeReader(Buffer, Context, BufferOwned);
33803381
M->setMaterializer(R);
33813382
if (std::error_code EC = R->ParseBitcodeInto(M)) {
33823383
delete M; // Also deletes R.
33833384
return EC;
33843385
}
3385-
// Have the BitcodeReader dtor delete 'Buffer'.
3386-
R->setBufferOwned(true);
33873386

33883387
R->materializeForwardReferencedFunctions();
33893388

@@ -3404,21 +3403,16 @@ Module *llvm::getStreamedBitcodeModule(const std::string &name,
34043403
delete M; // Also deletes R.
34053404
return nullptr;
34063405
}
3407-
R->setBufferOwned(false); // no buffer to delete
34083406
return M;
34093407
}
34103408

34113409
ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
34123410
LLVMContext &Context) {
3413-
ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer, Context);
3411+
ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer, Context, false);
34143412
if (!ModuleOrErr)
34153413
return ModuleOrErr;
34163414
Module *M = ModuleOrErr.get();
34173415

3418-
// Don't let the BitcodeReader dtor delete 'Buffer', regardless of whether
3419-
// there was an error.
3420-
static_cast<BitcodeReader*>(M->getMaterializer())->setBufferOwned(false);
3421-
34223416
// Read in the entire module, and destroy the BitcodeReader.
34233417
if (std::error_code EC = M->materializeAllPermanently()) {
34243418
delete M;
@@ -3434,9 +3428,7 @@ ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
34343428
std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
34353429
LLVMContext& Context,
34363430
std::string *ErrMsg) {
3437-
BitcodeReader *R = new BitcodeReader(Buffer, Context);
3438-
// Don't let the BitcodeReader dtor delete 'Buffer'.
3439-
R->setBufferOwned(false);
3431+
BitcodeReader *R = new BitcodeReader(Buffer, Context, /*BufferOwned*/ false);
34403432

34413433
std::string Triple("");
34423434
if (std::error_code EC = R->ParseTriple(Triple))

lib/Bitcode/Reader/BitcodeReader.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,11 @@ class BitcodeReader : public GVMaterializer {
223223
return std::error_code(E, BitcodeErrorCategory());
224224
}
225225

226-
explicit BitcodeReader(MemoryBuffer *buffer, LLVMContext &C)
227-
: Context(C), TheModule(nullptr), Buffer(buffer), BufferOwned(false),
228-
LazyStreamer(nullptr), NextUnreadBit(0), SeenValueSymbolTable(false),
229-
ValueList(C), MDValueList(C), SeenFirstFunctionBody(false),
230-
UseRelativeIDs(false) {}
226+
explicit BitcodeReader(MemoryBuffer *buffer, LLVMContext &C, bool BufferOwned)
227+
: Context(C), TheModule(nullptr), Buffer(buffer),
228+
BufferOwned(BufferOwned), LazyStreamer(nullptr), NextUnreadBit(0),
229+
SeenValueSymbolTable(false), ValueList(C), MDValueList(C),
230+
SeenFirstFunctionBody(false), UseRelativeIDs(false) {}
231231
explicit BitcodeReader(DataStreamer *streamer, LLVMContext &C)
232232
: Context(C), TheModule(nullptr), Buffer(nullptr), BufferOwned(false),
233233
LazyStreamer(streamer), NextUnreadBit(0), SeenValueSymbolTable(false),
@@ -239,10 +239,6 @@ class BitcodeReader : public GVMaterializer {
239239

240240
void FreeState();
241241

242-
/// setBufferOwned - If this is true, the reader will destroy the MemoryBuffer
243-
/// when the reader is destroyed.
244-
void setBufferOwned(bool Owned) { BufferOwned = Owned; }
245-
246242
bool isMaterializable(const GlobalValue *GV) const override;
247243
bool isDematerializable(const GlobalValue *GV) const override;
248244
std::error_code Materialize(GlobalValue *GV) override;

0 commit comments

Comments
 (0)