summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Lee <davelee.com@gmail.com>2022-01-06 19:38:31 -0800
committerDave Lee <davelee.com@gmail.com>2022-01-09 13:26:30 -0800
commit2bcff220bf1e372e91491911fe0bb76c4c4bbef8 (patch)
tree2d9b30afc7cbcdb6d74439a555211fc056dd0bdf
parenta6f1d046655c6850a355bb4557cb0dd463c9de0a (diff)
downloadllvm-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.cpp30
-rw-r--r--lldb/test/API/lang/cpp/frame-var-anon-unions/TestFrameVariableAnonymousUnions.py9
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"])