diff --git a/lldb/include/lldb/lldb-private-interfaces.h b/lldb/include/lldb/lldb-private-interfaces.h --- a/lldb/include/lldb/lldb-private-interfaces.h +++ b/lldb/include/lldb/lldb-private-interfaces.h @@ -30,8 +30,8 @@ const ArchSpec &arch); typedef std::unique_ptr (*ArchitectureCreateInstance)( const ArchSpec &arch); -typedef Disassembler *(*DisassemblerCreateInstance)(const ArchSpec &arch, - const char *flavor); +typedef lldb::DisassemblerSP (*DisassemblerCreateInstance)(const ArchSpec &arch, + const char *flavor); typedef DynamicLoader *(*DynamicLoaderCreateInstance)(Process *process, bool force); typedef lldb::JITLoaderSP (*JITLoaderCreateInstance)(Process *process, diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp --- a/lldb/source/Core/Disassembler.cpp +++ b/lldb/source/Core/Disassembler.cpp @@ -67,20 +67,16 @@ create_callback = PluginManager::GetDisassemblerCreateCallbackForPluginName(plugin_name); if (create_callback) { - DisassemblerSP disassembler_sp(create_callback(arch, flavor)); - - if (disassembler_sp) - return disassembler_sp; + if (auto disasm_sp = create_callback(arch, flavor)) + return disasm_sp; } } else { for (uint32_t idx = 0; (create_callback = PluginManager::GetDisassemblerCreateCallbackAtIndex( idx)) != nullptr; ++idx) { - DisassemblerSP disassembler_sp(create_callback(arch, flavor)); - - if (disassembler_sp) - return disassembler_sp; + if (auto disasm_sp = create_callback(arch, flavor)) + return disasm_sp; } } return DisassemblerSP(); diff --git a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.h b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.h --- a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.h +++ b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.h @@ -34,8 +34,8 @@ static llvm::StringRef GetPluginNameStatic() { return "llvm-mc"; } - static lldb_private::Disassembler * - CreateInstance(const lldb_private::ArchSpec &arch, const char *flavor); + static lldb::DisassemblerSP CreateInstance(const lldb_private::ArchSpec &arch, + const char *flavor); size_t DecodeInstructions(const lldb_private::Address &base_addr, const lldb_private::DataExtractor &data, diff --git a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp --- a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp +++ b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp @@ -1572,16 +1572,14 @@ DisassemblerLLVMC::~DisassemblerLLVMC() = default; -Disassembler *DisassemblerLLVMC::CreateInstance(const ArchSpec &arch, - const char *flavor) { +lldb::DisassemblerSP DisassemblerLLVMC::CreateInstance(const ArchSpec &arch, + const char *flavor) { if (arch.GetTriple().getArch() != llvm::Triple::UnknownArch) { - std::unique_ptr disasm_up( - new DisassemblerLLVMC(arch, flavor)); - - if (disasm_up.get() && disasm_up->IsValid()) - return disasm_up.release(); + auto disasm_sp = std::make_shared(arch, flavor); + if (disasm_sp && disasm_sp->IsValid()) + return disasm_sp; } - return nullptr; + return lldb::DisassemblerSP(); } size_t DisassemblerLLVMC::DecodeInstructions(const Address &base_addr,