llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Adrian Prantl (adrian-prantl) <details> <summary>Changes</summary> (based on a conversation I had with @<!-- -->labath yesterday in https://github.com/llvm/llvm-project/pull/106442) Most APIs that currently vend a Status would be better served by returning llvm::Expected<> instead. If possibles APIs should be refactored to avoid Status. The only legitimate long-term uses of Status are objects that need to store an error for a long time (which should be questioned as a design decision, too). This patch makes the transition to llvm::Error easier by making the places that cannot switch to llvm::Error explicit: They are marked with a call to Status::clone(). Every other API can and should be refactored to use llvm::Expected. In the end Status should only be used in very few places. Whenever an unchecked Error is dropped by Status it logs this to the verbose API channel. Implementation notes: This patch introduces two new kinds of error_category as well as new llvm::Error types. Here is the mapping of lldb::ErrorType to llvm::Errors: ``` (eErrorTypeInvalid) eErrorTypeGeneric llvm::StringError eErrorTypePOSIX llvm::ECError eErrorTypeMachKernel MachKernelError eErrorTypeExpression llvm::ErrorList<ExpressionError> eErrorTypeWin32 Win32Error ``` --- Patch is 96.21 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/106774.diff 81 Files Affected: - (modified) lldb/bindings/python/python-swigsafecast.swig (+1-1) - (modified) lldb/include/lldb/API/SBError.h (+2-2) - (modified) lldb/include/lldb/API/SBValueList.h (+1-1) - (modified) lldb/include/lldb/Core/ValueObjectConstResult.h (+2-2) - (modified) lldb/include/lldb/Target/Process.h (-2) - (modified) lldb/include/lldb/Utility/Status.h (+61-10) - (modified) lldb/source/API/SBBreakpoint.cpp (+3-3) - (modified) lldb/source/API/SBBreakpointLocation.cpp (+2-2) - (modified) lldb/source/API/SBBreakpointName.cpp (+8-9) - (modified) lldb/source/API/SBDebugger.cpp (+2-2) - (modified) lldb/source/API/SBError.cpp (+9-6) - (modified) lldb/source/API/SBFile.cpp (+5-10) - (modified) lldb/source/API/SBFormat.cpp (+1-1) - (modified) lldb/source/API/SBFrame.cpp (+5-4) - (modified) lldb/source/API/SBPlatform.cpp (+2-2) - (modified) lldb/source/API/SBProcess.cpp (+1-1) - (modified) lldb/source/API/SBSaveCoreOptions.cpp (+1-2) - (modified) lldb/source/API/SBStructuredData.cpp (+1-1) - (modified) lldb/source/API/SBTarget.cpp (+4-3) - (modified) lldb/source/API/SBThread.cpp (+1-1) - (modified) lldb/source/API/SBValue.cpp (+2-2) - (modified) lldb/source/API/SBValueList.cpp (+7-6) - (modified) lldb/source/API/SBWatchpoint.cpp (+1-1) - (modified) lldb/source/Commands/CommandObjectCommands.cpp (+2-2) - (modified) lldb/source/Commands/CommandObjectMemoryTag.cpp (+5-5) - (modified) lldb/source/Core/Debugger.cpp (+1-1) - (modified) lldb/source/Core/ModuleList.cpp (+2-3) - (modified) lldb/source/Core/PluginManager.cpp (+1-1) - (modified) lldb/source/Core/ThreadedCommunication.cpp (+1-1) - (modified) lldb/source/Core/ValueObject.cpp (+2-2) - (modified) lldb/source/Core/ValueObjectCast.cpp (+1-1) - (modified) lldb/source/Core/ValueObjectConstResult.cpp (+5-4) - (modified) lldb/source/Core/ValueObjectDynamicValue.cpp (+1-1) - (modified) lldb/source/Core/ValueObjectSyntheticFilter.cpp (+1-1) - (modified) lldb/source/DataFormatters/VectorType.cpp (+1-1) - (modified) lldb/source/Expression/FunctionCaller.cpp (+1-2) - (modified) lldb/source/Expression/LLVMUserExpression.cpp (+3-3) - (modified) lldb/source/Expression/Materializer.cpp (+1-1) - (modified) lldb/source/Expression/UserExpression.cpp (+4-4) - (modified) lldb/source/Host/common/LockFileBase.cpp (+2-2) - (modified) lldb/source/Host/common/NativeProcessProtocol.cpp (+5-5) - (modified) lldb/source/Host/common/TCPSocket.cpp (+2-2) - (modified) lldb/source/Host/macosx/objcxx/Host.mm (+1-1) - (modified) lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp (+6-6) - (modified) lldb/source/Interpreter/CommandInterpreter.cpp (+1-1) - (modified) lldb/source/Interpreter/OptionValueRegex.cpp (+1-1) - (modified) lldb/source/Interpreter/ScriptInterpreter.cpp (+1-1) - (modified) lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp (+1-1) - (modified) lldb/source/Plugins/Platform/Android/AdbClient.cpp (+4-4) - (modified) lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp (+2-2) - (modified) lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h (+1-1) - (modified) lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.mm (+7-7) - (modified) lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp (+2-2) - (modified) lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp (+2-2) - (modified) lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_arm64.cpp (+5-5) - (modified) lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp (+1-1) - (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp (+1-1) - (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (+1-1) - (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (+1-1) - (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp (+4-4) - (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp (+1-1) - (modified) lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp (+1-1) - (modified) lldb/source/Plugins/ScriptInterpreter/Python/Interfaces/ScriptedProcessPythonInterface.cpp (+3-3) - (modified) lldb/source/Plugins/ScriptInterpreter/Python/Interfaces/ScriptedPythonInterface.h (+7-3) - (modified) lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp (+11-11) - (modified) lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp (+2-2) - (modified) lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp (+1-1) - (modified) lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h (+1-1) - (modified) lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (+1-1) - (modified) lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp (+1-1) - (modified) lldb/source/Target/ModuleCache.cpp (+2-2) - (modified) lldb/source/Target/Platform.cpp (+3-3) - (modified) lldb/source/Target/Process.cpp (+4-41) - (modified) lldb/source/Target/StackFrame.cpp (+1-1) - (modified) lldb/source/Target/Target.cpp (+5-7) - (modified) lldb/source/Target/Thread.cpp (+2-1) - (modified) lldb/source/Utility/Status.cpp (+172-66) - (modified) lldb/source/Utility/StructuredData.cpp (+1-1) - (modified) lldb/unittests/Target/RemoteAwarePlatformTest.cpp (+5-4) - (modified) lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h (+2-2) - (modified) lldb/unittests/Utility/StatusTest.cpp (+3-3) ``````````diff diff --git a/lldb/bindings/python/python-swigsafecast.swig b/lldb/bindings/python/python-swigsafecast.swig index 34f8c6f0ff8d35..c46c247da87278 100644 --- a/lldb/bindings/python/python-swigsafecast.swig +++ b/lldb/bindings/python/python-swigsafecast.swig @@ -34,7 +34,7 @@ PythonObject SWIGBridge::ToSWIGWrapper(lldb::BreakpointSP breakpoint_sp) { } PythonObject SWIGBridge::ToSWIGWrapper(const Status& status) { - return ToSWIGHelper(new lldb::SBError(status), SWIGTYPE_p_lldb__SBError); + return ToSWIGHelper(new lldb::SBError(status.clone()), SWIGTYPE_p_lldb__SBError); } PythonObject SWIGBridge::ToSWIGWrapper(std::unique_ptr<lldb::SBStructuredData> data_sb) { diff --git a/lldb/include/lldb/API/SBError.h b/lldb/include/lldb/API/SBError.h index 17f2c6c3027af7..9f55f92131c06e 100644 --- a/lldb/include/lldb/API/SBError.h +++ b/lldb/include/lldb/API/SBError.h @@ -97,7 +97,7 @@ class LLDB_API SBError { friend class lldb_private::ScriptInterpreter; friend class lldb_private::python::SWIGBridge; - SBError(const lldb_private::Status &error); + SBError(lldb_private::Status &&error); lldb_private::Status *get(); @@ -107,7 +107,7 @@ class LLDB_API SBError { lldb_private::Status &ref(); - void SetError(const lldb_private::Status &lldb_error); + void SetError(lldb_private::Status &&lldb_error); private: std::unique_ptr<lldb_private::Status> m_opaque_up; diff --git a/lldb/include/lldb/API/SBValueList.h b/lldb/include/lldb/API/SBValueList.h index a5017bccc50533..52a86f989e153a 100644 --- a/lldb/include/lldb/API/SBValueList.h +++ b/lldb/include/lldb/API/SBValueList.h @@ -96,7 +96,7 @@ class LLDB_API SBValueList { std::unique_ptr<ValueListImpl> m_opaque_up; - void SetError(const lldb_private::Status &status); + void SetError(lldb_private::Status &&status); }; } // namespace lldb diff --git a/lldb/include/lldb/Core/ValueObjectConstResult.h b/lldb/include/lldb/Core/ValueObjectConstResult.h index d3b3362bd0e9ec..9c34617af71d0d 100644 --- a/lldb/include/lldb/Core/ValueObjectConstResult.h +++ b/lldb/include/lldb/Core/ValueObjectConstResult.h @@ -61,7 +61,7 @@ class ValueObjectConstResult : public ValueObject { // When an expression fails to evaluate, we return an error static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope, - const Status &error); + Status &&error); std::optional<uint64_t> GetByteSize() override; @@ -146,7 +146,7 @@ class ValueObjectConstResult : public ValueObject { ConstString name, Module *module = nullptr); ValueObjectConstResult(ExecutionContextScope *exe_scope, - ValueObjectManager &manager, const Status &error); + ValueObjectManager &manager, Status &&error); ValueObject *CreateChildAtIndex(size_t idx) override { return m_impl.CreateChildAtIndex(idx); diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h index a7de991104434d..c66cfb2c245efd 100644 --- a/lldb/include/lldb/Target/Process.h +++ b/lldb/include/lldb/Target/Process.h @@ -1296,8 +1296,6 @@ class Process : public std::enable_shared_from_this<Process>, const EvaluateExpressionOptions &options, DiagnosticManager &diagnostic_manager); - static const char *ExecutionResultAsCString(lldb::ExpressionResults result); - void GetStatus(Stream &ostrm); size_t GetThreadStatus(Stream &ostrm, bool only_threads_with_stop_reason, diff --git a/lldb/include/lldb/Utility/Status.h b/lldb/include/lldb/Utility/Status.h index b304291ffae00e..bd60fcf2885e07 100644 --- a/lldb/include/lldb/Utility/Status.h +++ b/lldb/include/lldb/Utility/Status.h @@ -26,6 +26,34 @@ class raw_ostream; namespace lldb_private { +class MachKernelError + : public llvm::ErrorInfo<MachKernelError, llvm::StringError> { +public: + using llvm::ErrorInfo<MachKernelError, llvm::StringError>::ErrorInfo; + MachKernelError(std::error_code ec, const llvm::Twine &msg = {}) + : ErrorInfo(msg, ec) {} + static char ID; +}; + +class Win32Error : public llvm::ErrorInfo<Win32Error, llvm::StringError> { +public: + using llvm::ErrorInfo<Win32Error, llvm::StringError>::ErrorInfo; + Win32Error(std::error_code ec, const llvm::Twine &msg = {}) + : ErrorInfo(msg, ec) {} + static char ID; +}; + +class ExpressionError + : public llvm::ErrorInfo<ExpressionError, llvm::StringError> { +public: + using llvm::ErrorInfo<ExpressionError, llvm::StringError>::ErrorInfo; + ExpressionError(std::error_code ec, std::string msg = {}) + : ErrorInfo(msg, ec) {} + static char ID; +}; + +const char *ExecutionResultAsCString(lldb::ExpressionResults result); + /// \class Status Status.h "lldb/Utility/Status.h" An error handling class. /// /// This class is designed to be able to hold any error code that can be @@ -41,13 +69,32 @@ namespace lldb_private { /// of themselves for printing results and error codes. The string value will /// be fetched on demand and its string value will be cached until the error /// is cleared of the value of the error changes. +/// +/// API design notes: +/// +/// Most APIs that currently vend a Status would be better served by +/// returning llvm::Expected<> instead. If possibles APIs should be +/// refactored to avoid Status. The only legitimate long-term uses of +/// Status are objects that need to store an error for a long time +/// (which should be questioned as a design decision, too). +/// +/// Implementation notes: +/// +/// Internally, Status stores an llvm::Error. +/// eErrorTypeInvalid +/// eErrorTypeGeneric llvm::StringError +/// eErrorTypePOSIX llvm::ECError +/// eErrorTypeMachKernel MachKernelError +/// eErrorTypeExpression llvm::ErrorList<ExpressionError> +/// eErrorTypeWin32 Win32Error + class Status { public: - /// Every error value that this object can contain needs to be able to fit /// into ValueType. typedef uint32_t ValueType; Status(); + Status(Status &&other) = default; /// Initialize the error object with a generic success value. /// @@ -79,9 +126,7 @@ class Status { } static Status FromExpressionError(lldb::ExpressionResults result, - std::string msg) { - return Status(result, lldb::eErrorTypeExpression, msg); - } + std::string msg); /// Set the current error to errno. /// @@ -91,10 +136,14 @@ class Status { ~Status(); - // llvm::Error support - explicit Status(llvm::Error error) { *this = std::move(error); } + /// Try not to use this in new code. Migrate APIs to llvm::Expected instead. + static Status FromError(llvm::Error &&error); const Status &operator=(llvm::Error error); + Status &operator=(Status &&); + /// FIXME: Replace this with a takeError() method. llvm::Error ToError() const; + /// Don't call this function in new code. Redesign the API instead. + Status clone() const { return Status(ToError()); } /// Get the error string associated with the current error. // @@ -145,10 +194,12 @@ class Status { bool Success() const; protected: - /// Status code as an integer value. - ValueType m_code = 0; - /// The type of the above error code. - lldb::ErrorType m_type = lldb::eErrorTypeInvalid; + Status(llvm::Error &&error) : m_error(std::move(error)) {} + mutable llvm::Error m_error; + // /// Status code as an integer value. + // ValueType m_code = 0; + // /// The type of the above error code. + // lldb::ErrorType m_type = lldb::eErrorTypeInvalid; /// A string representation of the error code. mutable std::string m_string; }; diff --git a/lldb/source/API/SBBreakpoint.cpp b/lldb/source/API/SBBreakpoint.cpp index 3e9c01080588e5..b2ed034d19983c 100644 --- a/lldb/source/API/SBBreakpoint.cpp +++ b/lldb/source/API/SBBreakpoint.cpp @@ -622,7 +622,7 @@ SBError SBBreakpoint::SetScriptCallbackFunction( callback_function_name, extra_args.m_impl_up ->GetObjectSP()); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); } else sb_error = Status::FromErrorString("invalid breakpoint"); @@ -645,7 +645,7 @@ SBError SBBreakpoint::SetScriptCallbackBody(const char *callback_body_text) { .GetScriptInterpreter() ->SetBreakpointCommandCallback(bp_options, callback_body_text, /*is_callback=*/false); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); } else sb_error = Status::FromErrorString("invalid breakpoint"); @@ -670,7 +670,7 @@ SBError SBBreakpoint::AddNameWithErrorHandling(const char *new_name) { bkpt_sp->GetTarget().GetAPIMutex()); Status error; bkpt_sp->GetTarget().AddNameToBreakpoint(bkpt_sp, new_name, error); - status.SetError(error); + status.SetError(std::move(error)); } else { status = Status::FromErrorString("invalid breakpoint"); } diff --git a/lldb/source/API/SBBreakpointLocation.cpp b/lldb/source/API/SBBreakpointLocation.cpp index e5c96b81e80904..b2d1da3927c6ea 100644 --- a/lldb/source/API/SBBreakpointLocation.cpp +++ b/lldb/source/API/SBBreakpointLocation.cpp @@ -239,7 +239,7 @@ SBError SBBreakpointLocation::SetScriptCallbackFunction( callback_function_name, extra_args.m_impl_up ->GetObjectSP()); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); } else sb_error = Status::FromErrorString("invalid breakpoint"); @@ -264,7 +264,7 @@ SBBreakpointLocation::SetScriptCallbackBody(const char *callback_body_text) { .GetScriptInterpreter() ->SetBreakpointCommandCallback(bp_options, callback_body_text, /*is_callback=*/false); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); } else sb_error = Status::FromErrorString("invalid breakpoint"); diff --git a/lldb/source/API/SBBreakpointName.cpp b/lldb/source/API/SBBreakpointName.cpp index 7dc8dee19f43d2..831260d44e8e7f 100644 --- a/lldb/source/API/SBBreakpointName.cpp +++ b/lldb/source/API/SBBreakpointName.cpp @@ -570,14 +570,13 @@ SBError SBBreakpointName::SetScriptCallbackFunction( m_impl_up->GetTarget()->GetAPIMutex()); BreakpointOptions &bp_options = bp_name->GetOptions(); - Status error; - error = m_impl_up->GetTarget() - ->GetDebugger() - .GetScriptInterpreter() - ->SetBreakpointCommandCallbackFunction( - bp_options, callback_function_name, - extra_args.m_impl_up->GetObjectSP()); - sb_error.SetError(error); + Status error = m_impl_up->GetTarget() + ->GetDebugger() + .GetScriptInterpreter() + ->SetBreakpointCommandCallbackFunction( + bp_options, callback_function_name, + extra_args.m_impl_up->GetObjectSP()); + sb_error.SetError(std::move(error)); UpdateName(*bp_name); return sb_error; } @@ -600,7 +599,7 @@ SBBreakpointName::SetScriptCallbackBody(const char *callback_body_text) { .GetScriptInterpreter() ->SetBreakpointCommandCallback( bp_options, callback_body_text, /*is_callback=*/false); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); if (!sb_error.Fail()) UpdateName(*bp_name); diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 72501570320d57..b21d7e67290073 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -220,7 +220,7 @@ lldb::SBError SBDebugger::InitializeWithErrorHandling() { SBError error; if (auto e = g_debugger_lifetime->Initialize( std::make_unique<SystemInitializerFull>(), LoadPlugin)) { - error.SetError(Status(std::move(e))); + error.SetError(Status::FromError(std::move(e))); } return error; } @@ -1360,7 +1360,7 @@ SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value, "invalid debugger instance name '%s'", debugger_instance_name); } if (error.Fail()) - sb_error.SetError(error); + sb_error.SetError(std::move(error)); return sb_error; } diff --git a/lldb/source/API/SBError.cpp b/lldb/source/API/SBError.cpp index 30d9ccc78ee376..287fa6c499dd2f 100644 --- a/lldb/source/API/SBError.cpp +++ b/lldb/source/API/SBError.cpp @@ -23,7 +23,8 @@ SBError::SBError() { LLDB_INSTRUMENT_VA(this); } SBError::SBError(const SBError &rhs) { LLDB_INSTRUMENT_VA(this, rhs); - m_opaque_up = clone(rhs.m_opaque_up); + if (rhs.m_opaque_up) + m_opaque_up = std::make_unique<Status>(rhs.m_opaque_up->clone()); } SBError::SBError(const char *message) { @@ -32,8 +33,8 @@ SBError::SBError(const char *message) { SetErrorString(message); } -SBError::SBError(const lldb_private::Status &status) - : m_opaque_up(new Status(status)) { +SBError::SBError(lldb_private::Status &&status) + : m_opaque_up(new Status(std::move(status))) { LLDB_INSTRUMENT_VA(this, status); } @@ -43,7 +44,9 @@ const SBError &SBError::operator=(const SBError &rhs) { LLDB_INSTRUMENT_VA(this, rhs); if (this != &rhs) - m_opaque_up = clone(rhs.m_opaque_up); + if (rhs.m_opaque_up) + m_opaque_up = std::make_unique<Status>(rhs.m_opaque_up->clone()); + return *this; } @@ -111,9 +114,9 @@ void SBError::SetError(uint32_t err, ErrorType type) { *m_opaque_up = Status(err, type); } -void SBError::SetError(const Status &lldb_error) { +void SBError::SetError(Status &&lldb_error) { CreateIfNeeded(); - *m_opaque_up = lldb_error; + *m_opaque_up = std::move(lldb_error); } void SBError::SetErrorToErrno() { diff --git a/lldb/source/API/SBFile.cpp b/lldb/source/API/SBFile.cpp index 623708780f4c67..2ae4b1481afbf2 100644 --- a/lldb/source/API/SBFile.cpp +++ b/lldb/source/API/SBFile.cpp @@ -62,8 +62,7 @@ SBError SBFile::Read(uint8_t *buf, size_t num_bytes, size_t *bytes_read) { error = Status::FromErrorString("invalid SBFile"); *bytes_read = 0; } else { - Status status = m_opaque_sp->Read(buf, num_bytes); - error.SetError(status); + error.SetError(m_opaque_sp->Read(buf, num_bytes)); *bytes_read = num_bytes; } return error; @@ -78,8 +77,7 @@ SBError SBFile::Write(const uint8_t *buf, size_t num_bytes, error = Status::FromErrorString("invalid SBFile"); *bytes_written = 0; } else { - Status status = m_opaque_sp->Write(buf, num_bytes); - error.SetError(status); + error.SetError(m_opaque_sp->Write(buf, num_bytes)); *bytes_written = num_bytes; } return error; @@ -92,8 +90,7 @@ SBError SBFile::Flush() { if (!m_opaque_sp) { error = Status::FromErrorString("invalid SBFile"); } else { - Status status = m_opaque_sp->Flush(); - error.SetError(status); + error.SetError(m_opaque_sp->Flush()); } return error; } @@ -106,10 +103,8 @@ bool SBFile::IsValid() const { SBError SBFile::Close() { LLDB_INSTRUMENT_VA(this); SBError error; - if (m_opaque_sp) { - Status status = m_opaque_sp->Close(); - error.SetError(status); - } + if (m_opaque_sp) + error.SetError(m_opaque_sp->Close()); return error; } diff --git a/lldb/source/API/SBFormat.cpp b/lldb/source/API/SBFormat.cpp index 51cddceea0372e..080e219d64a362 100644 --- a/lldb/source/API/SBFormat.cpp +++ b/lldb/source/API/SBFormat.cpp @@ -36,7 +36,7 @@ SBFormat::SBFormat(const char *format, lldb::SBError &error) { FormatEntrySP format_entry_sp = std::make_shared<FormatEntity::Entry>(); Status status = FormatEntity::Parse(format, *format_entry_sp); - error.SetError(status); + error.SetError(std::move(status)); if (error.Success()) m_opaque_sp = format_entry_sp; } diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp index b1360e88bcd3af..30c44b974988d0 100644 --- a/lldb/source/API/SBFrame.cpp +++ b/lldb/source/API/SBFrame.cpp @@ -809,7 +809,7 @@ SBValueList SBFrame::GetVariables(const lldb::SBVariablesOptions &options) { Status var_error; variable_list = frame->GetVariableList(true, &var_error); if (var_error.Fail()) - value_list.SetError(var_error); + value_list.SetError(std::move(var_error)); if (variable_list) { const size_t num_variables = variable_list->GetSize(); if (num_variables) { @@ -1033,7 +1033,8 @@ SBValue SBFrame::EvaluateExpression(const char *expr) { Status error; error = Status::FromErrorString("can't evaluate expressions when the " "process is running."); - ValueObjectSP error_val_sp = ValueObjectConstResult::Create(nullptr, error); + ValueObjectSP error_val_sp = + ValueObjectConstResult::Create(nullptr, std::move(error)); result.SetSP(error_val_sp, false); } return result; @@ -1129,13 +1130,13 @@ lldb::SBValue SBFrame::EvaluateExpression(const char *expr, Status error; error = Status::FromErrorString("can't evaluate expressions when the " "process is running."); - expr_value_sp = ValueObjectConstResult::Create(nullptr, error); + expr_value_sp = ValueObjectConstResult::Create(nullptr, std::move(error)); expr_result.SetSP(expr_value_sp, false); } } else { Status error; error = Status::FromErrorString("sbframe object is not valid."); - expr_value_sp = ValueObjectConstResult::Create(nullptr, error); + expr_value_sp = ValueObjectConstResult::Create(nullptr, std::move(error)); expr_result.SetSP(expr_value_sp, false); } diff --git a/lldb/source/API/SBPlatform.cpp b/lldb/source/API/SBPlatform.cpp index 2f0f925302f16e..10ed653500d9f8 100644 --- a/lldb/source/API/SBPlatform.cpp +++ b/lldb/source/API/SBPlatform.cpp @@ -586,7 +586,7 @@ SBProcess SBPlatform::Attach(SBAttachInfo &attach_info, Status status; ProcessSP process_sp = platform_sp->Attach(info, debugger.ref(), target.GetSP().get(), status); - error.SetError(status); + error.SetError(std::move(status)); return SBProcess(process_sp); } @@ -728,7 +728,7 @@ SBError SBPlatform::SetLocateModuleCallback( symbol_file_spec = symbol_file_spec_sb.ref(); } - return error.ref(); + return error.ref().clone(); }); return SBError(); } diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp index 3eed51f0245f6f..9773144723c34c 100644 --- a/lldb/source/API/SBProcess.cpp +++ b/lldb/source/API/SBProcess.cpp @@ -1450,7 +1450,7 @@ lldb::SBError SBProcess::DeallocateMemory(lldb::addr_t ptr) { std::lock_guard<std::recursive_mutex> guard( process_sp->GetTarget().GetAPIMutex()); Status error = process_sp->DeallocateMemory(ptr); - sb_error.SetError(error); + sb_error.SetError(std::move(error)); } else { sb_error = Status::FromErrorString("process is running"); } diff --git a/lldb/source/API/SBSaveCoreOptions.cpp b/lldb/source/API/SBSaveCoreOptions.cpp index 2cd431611ef558..ef82b0253f1199 100644 --- a/lldb/source/API/SBSaveCoreOptions.cpp +++ b/lldb/source/API/SBSaveCoreOptions.cpp @@ -40,8 +40,7 @@ SBSaveCoreOptions::operator=(const SBSaveCoreOptions &rhs) { SBError SBSaveCoreOptions::SetPluginName(const char *name) { LLDB_INSTRUMENT_VA(this, name); - lldb_private::Status error = m_opaque_up->SetPluginName(name); - return SBError(error); + return SBError(m_opaque_up->SetPluginName(name)); } void SBSaveCoreOptions::SetStyle(lldb::SaveCoreStyle style) { diff --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp index 801ebf45e0e524..b891a34bd7c76a 100644 --- a/lldb/source/API/SBStructuredData.cpp +++ b/lldb/source/API/SBStructuredData.cpp @@ -133,7 +133,7 @@ lldb::SBError SBStructuredData::GetDescription(lldb::SBStream &stream) const { Status error = m_impl_up->GetDescription(stream.ref()); SBError sb_error; - sb_error.SetError(error); ... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/106774 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits