diff options
author | Dave Lee <davelee.com@gmail.com> | 2022-01-06 19:38:31 -0800 |
---|---|---|
committer | Dave Lee <davelee.com@gmail.com> | 2022-01-09 13:26:30 -0800 |
commit | 2bcff220bf1e372e91491911fe0bb76c4c4bbef8 (patch) | |
tree | 2d9b30afc7cbcdb6d74439a555211fc056dd0bdf | |
parent | a6f1d046655c6850a355bb4557cb0dd463c9de0a (diff) | |
download | llvm-2bcff220bf1e372e91491911fe0bb76c4c4bbef8.tar.gz |
[lldb] Set result error state in 'frame variable'
Ensure that errors in `frame variable` are reflected in result object.
The statistics for `frame variable` show invocations as being successful, even
when executing one of the error paths.
This change replaces `result.GetErrorStream()` with `result.AppendError()`,
which also sets the status to `eReturnStatusFailed`.
Differential Revision: https://reviews.llvm.org/D116788
(cherry picked from commit 2c7d10c41278181e3e45c68f28b501cd95193a8a)
-rw-r--r-- | lldb/source/Commands/CommandObjectFrame.cpp | 30 | ||||
-rw-r--r-- | lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py | 9 |
2 files changed, 20 insertions, 19 deletions
diff --git a/lldb/source/Commands/CommandObjectFrame.cpp b/lldb/source/Commands/CommandObjectFrame.cpp index 9cfe997f9227..8dd1a79d3895 100644 --- a/lldb/source/Commands/CommandObjectFrame.cpp +++ b/lldb/source/Commands/CommandObjectFrame.cpp @@ -558,18 +558,16 @@ protected: } } } else if (num_matches == 0) { - result.GetErrorStream().Printf("error: no variables matched " - "the regular expression '%s'.\n", - entry.c_str()); + result.AppendErrorWithFormat( + "no variables matched the regular expression '%s'.", + entry.c_str()); } } else { if (llvm::Error err = regex.GetError()) - result.GetErrorStream().Printf( - "error: %s\n", llvm::toString(std::move(err)).c_str()); + result.AppendError(llvm::toString(std::move(err))); else - result.GetErrorStream().Printf( - "error: unknown regex error when compiling '%s'\n", - entry.c_str()); + result.AppendErrorWithFormat( + "unknown regex error when compiling '%s'", entry.c_str()); } } else // No regex, either exact variable names or variable // expressions. @@ -605,14 +603,13 @@ protected: valobj_sp->GetParent() ? entry.c_str() : nullptr); valobj_sp->Dump(output_stream, options); } else { - const char *error_cstr = error.AsCString(nullptr); - if (error_cstr) - result.GetErrorStream().Printf("error: %s\n", error_cstr); + if (auto error_cstr = error.AsCString(nullptr)) + result.AppendError(error_cstr); else - result.GetErrorStream().Printf("error: unable to find any " - "variable expression path that " - "matches '%s'.\n", - entry.c_str()); + result.AppendErrorWithFormat( + "unable to find any variable expression path that matches " + "'%s'.", + entry.c_str()); } } } @@ -680,7 +677,8 @@ protected: } } } - result.SetStatus(eReturnStatusSuccessFinishResult); + if (result.GetStatus() != eReturnStatusFailed) + result.SetStatus(eReturnStatusSuccessFinishResult); } if (m_option_variable.show_recognized_args) { diff --git a/lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py b/lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py index 6352b68e7d75..2682e42be9ca 100644 --- a/lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py +++ b/lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py @@ -30,6 +30,9 @@ class FrameVariableAnonymousUnionsTestCase(TestBase): self.expect('frame variable c', substrs=["'A"]) - self.expect('frame variable x', matching=False, substrs=['3']) - self.expect('frame variable y', matching=False, substrs=["'B'"]) - self.expect('frame variable z', matching=False, substrs=['14']) + self.expect('frame variable x', error=True, + substrs=["no variable named 'x' found"]) + self.expect('frame variable y', error=True, + substrs=["no variable named 'y' found"]) + self.expect('frame variable z', error=True, + substrs=["no variable named 'z' found"]) |