================
@@ -174,33 +233,91 @@ const char *Status::AsCString(const char 
*default_error_str) const {
 
 // Clear the error and any cached error string that it might contain.
 void Status::Clear() {
-  m_code = 0;
-  m_type = eErrorTypeInvalid;
-  m_string.clear();
+  if (m_error)
+    LLDB_LOG_ERRORV(GetLog(LLDBLog::API), std::move(m_error),
+                    "dropping error {0}");
+  m_error = llvm::Error::success();
+  llvm::consumeError(std::move(m_error));
 }
 
 // Access the error value.
-Status::ValueType Status::GetError() const { return m_code; }
+Status::ValueType Status::GetError() const {
+  Status::ValueType result = 0;
+  llvm::visitErrors(m_error, [&](const llvm::ErrorInfoBase &error) {
+    std::error_code ec = error.convertToErrorCode();
+    if (ec.category() == std::generic_category() ||
+        ec.category() == generic_category() ||
+        ec.category() == expression_category())
+      result = ec.value();
+    else
+      result = 0xff;
----------------
adrian-prantl wrote:

I addressed this issue by documenting the behavior the Doxygen comment. It 
returns the error of the first Error. This works with how it's currently used 
in Expression errors, which consist of the ExpressionError, followed by a bunch 
of clang diagnostics.

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

Reply via email to