From a3e2f0acdf5ee452c8eb177b56f476b432539e08 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Thu, 21 Nov 2024 11:11:25 -0800 Subject: [PATCH] [lldb] Fix a regression in Status::GetErrorType() (#117095) The refactored code did not correctly determine the type of expression errors. rdar://139699028 --- lldb/source/Utility/Status.cpp | 6 +++++- .../expression/diagnostics/TestExprDiagnostics.py | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lldb/source/Utility/Status.cpp b/lldb/source/Utility/Status.cpp index 1d171c6b6c37..5757935fb862 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()) + result = static_cast(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 fac562edf9ec..b9b5bffb87e8 100644 --- a/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py +++ b/lldb/test/API/commands/expression/diagnostics/TestExprDiagnostics.py @@ -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()