From e804b5b76283725b8f0bb0eb12a5ea0ab645b2c9 Mon Sep 17 00:00:00 2001 From: Sean Callanan Date: Fri, 6 Apr 2012 18:21:09 +0000 Subject: Fixed two leaks in the MC disassembler. The MC disassembler requires a MCSubtargetInfo and a MCInstrInfo to exist in order to initialize the instruction printer and disassembler; however, although the printer and disassembler keep references to these objects they do not own them. Previously, the MCSubtargetInfo and MCInstrInfo objects were just leaked. I have extended LLVMDisasmContext to own these objects and delete them when it is destroyed. llvm-svn: 154192 --- llvm/lib/MC/MCDisassembler/Disassembler.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'llvm/lib/MC/MCDisassembler/Disassembler.h') diff --git a/llvm/lib/MC/MCDisassembler/Disassembler.h b/llvm/lib/MC/MCDisassembler/Disassembler.h index 238ff7d5002..880a31ad76b 100644 --- a/llvm/lib/MC/MCDisassembler/Disassembler.h +++ b/llvm/lib/MC/MCDisassembler/Disassembler.h @@ -28,7 +28,9 @@ class MCContext; class MCAsmInfo; class MCDisassembler; class MCInstPrinter; +class MCInstrInfo; class MCRegisterInfo; +class MCSubtargetInfo; class Target; // @@ -61,6 +63,10 @@ private: llvm::OwningPtr MAI; // The register information for the target architecture. llvm::OwningPtr MRI; + // The subtarget information for the target architecture. + llvm::OwningPtr MSI; + // The instruction information for the target architecture. + llvm::OwningPtr MII; // The assembly context for creating symbols and MCExprs. llvm::OwningPtr Ctx; // The disassembler for the target architecture. @@ -78,6 +84,8 @@ public: LLVMSymbolLookupCallback symbolLookUp, const Target *theTarget, const MCAsmInfo *mAI, const MCRegisterInfo *mRI, + const MCSubtargetInfo *mSI, + const MCInstrInfo *mII, llvm::MCContext *ctx, const MCDisassembler *disAsm, MCInstPrinter *iP) : TripleName(tripleName), DisInfo(disInfo), TagType(tagType), GetOpInfo(getOpInfo), @@ -85,6 +93,8 @@ public: CommentStream(CommentsToEmit) { MAI.reset(mAI); MRI.reset(mRI); + MSI.reset(mSI); + MII.reset(mII); Ctx.reset(ctx); DisAsm.reset(disAsm); IP.reset(iP); -- cgit v1.2.3