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

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

rdar://139699028
This commit is contained in:
Adrian Prantl
2024-11-21 11:11:25 -08:00
committed by GitHub
parent 8663b8777e
commit a3e2f0acdf
2 changed files with 17 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -184,6 +184,18 @@ note: candidate function not viable: requires single argument 'x', but 2 argumen
# 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()