[Lldb-commits] [lldb] a3e2f0a - [lldb] Fix a regression in Status::GetErrorType() (#117095)

via lldb-commits lldb-commits at lists.llvm.org
Thu Nov 21 11:11:28 PST 2024


Author: Adrian Prantl
Date: 2024-11-21T11:11:25-08:00
New Revision: a3e2f0acdf5ee452c8eb177b56f476b432539e08

URL: https://github.com/llvm/llvm-project/commit/a3e2f0acdf5ee452c8eb177b56f476b432539e08
DIFF: https://github.com/llvm/llvm-project/commit/a3e2f0acdf5ee452c8eb177b56f476b432539e08.diff

LOG: [lldb] Fix a regression in Status::GetErrorType()  (#117095)

The refactored code did not correctly determine the type of expression
errors.

rdar://139699028

Added: 
    

Modified: 
    lldb/source/Utility/Status.cpp
    lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Utility/Status.cpp b/lldb/source/Utility/Status.cpp
index 1d171c6b6c3746..5757935fb86228 100644
--- a/lldb/source/Utility/Status.cpp
+++ b/lldb/source/Utility/Status.cpp
@@ -258,7 +258,11 @@ ErrorType Status::GetType() const {
     // Return the first only.
     if (result != eErrorTypeInvalid)
       return;
-    result = ErrorCodeToErrorType(error.convertToErrorCode());
+    if (error.isA<CloneableError>())
+      result = static_cast<const CloneableError &>(error).GetErrorType();
+    else
+      result = ErrorCodeToErrorType(error.convertToErrorCode());
+
   });
   return result;
 }

diff  --git a/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py b/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py
index fac562edf9ece0..b9b5bffb87e817 100644
--- a/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py
+++ b/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py
@@ -184,6 +184,18 @@ def test_source_locations_from_objc_modules(self):
         # the first argument are probably stable enough that this test can check for them.
         self.assertIn("void NSLog(NSString *format", value.GetError().GetCString())
 
+    def test_error_type(self):
+        """Test the error reporting in the API"""
+        self.build()
+
+        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
+            self, "// Break here", self.main_source_spec
+        )
+        frame = thread.GetFrameAtIndex(0)
+        value = frame.EvaluateExpression('#error("I am error.")')
+        error = value.GetError()
+        self.assertEqual(error.GetType(), lldb.eErrorTypeExpression)
+
     def test_command_expr_sbdata(self):
         """Test the structured diagnostics data"""
         self.build()


        


More information about the lldb-commits mailing list