aboutsummaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/source/Commands/CommandObjectExpression.cpp4
-rw-r--r--lldb/test/API/commands/expression/po_persistent_result/Makefile3
-rw-r--r--lldb/test/API/commands/expression/po_persistent_result/TestPoPersistentResult.py31
-rw-r--r--lldb/test/API/commands/expression/po_persistent_result/main.m6
4 files changed, 44 insertions, 0 deletions
diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp
index 9cce009f..9402000 100644
--- a/lldb/source/Commands/CommandObjectExpression.cpp
+++ b/lldb/source/Commands/CommandObjectExpression.cpp
@@ -21,6 +21,7 @@
#include "lldb/Target/Process.h"
#include "lldb/Target/StackFrame.h"
#include "lldb/Target/Target.h"
+#include "lldb/lldb-private-enumerations.h"
using namespace lldb;
using namespace lldb_private;
@@ -346,6 +347,9 @@ EvaluateExpressionOptions
CommandObjectExpression::GetEvalOptions(const Target &target) {
EvaluateExpressionOptions options;
options.SetCoerceToId(m_varobj_options.use_objc);
+ if (m_command_options.m_verbosity ==
+ eLanguageRuntimeDescriptionDisplayVerbosityCompact)
+ options.SetSuppressPersistentResult(m_varobj_options.use_objc);
options.SetUnwindOnError(m_command_options.unwind_on_error);
options.SetIgnoreBreakpoints(m_command_options.ignore_breakpoints);
options.SetKeepInMemory(true);
diff --git a/lldb/test/API/commands/expression/po_persistent_result/Makefile b/lldb/test/API/commands/expression/po_persistent_result/Makefile
new file mode 100644
index 0000000..845553d
--- /dev/null
+++ b/lldb/test/API/commands/expression/po_persistent_result/Makefile
@@ -0,0 +1,3 @@
+OBJC_SOURCES := main.m
+
+include Makefile.rules
diff --git a/lldb/test/API/commands/expression/po_persistent_result/TestPoPersistentResult.py b/lldb/test/API/commands/expression/po_persistent_result/TestPoPersistentResult.py
new file mode 100644
index 0000000..3c3b863
--- /dev/null
+++ b/lldb/test/API/commands/expression/po_persistent_result/TestPoPersistentResult.py
@@ -0,0 +1,31 @@
+"""
+Test behavior of `po` and persistent results.
+"""
+
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestCase(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.build()
+ lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.m"))
+
+ def test_po_does_not_print_persistent_result(self):
+ """Test `po` doesn't advertise a persistent result variable."""
+ self.expect("po obj", matching=False, substrs=["$0 = "])
+
+ def test_po_does_not_keep_persistent_result(self):
+ """Test `po` doesn't leak a persistent result variable."""
+ self.expect("po obj")
+ # Verify `po` used a temporary persistent result. In other words, there
+ # should be no $0 at this point.
+ self.expect("expression $0", error=True)
+ self.expect("expression obj", substrs=["$0 = "])
+
+ def test_expression_description_verbosity(self):
+ """Test printing object description _and_ opt-in to persistent results."""
+ self.expect("expression -O -vfull -- obj", substrs=["$0 = "])
+ self.expect("expression $0", substrs=["$0 = "])
diff --git a/lldb/test/API/commands/expression/po_persistent_result/main.m b/lldb/test/API/commands/expression/po_persistent_result/main.m
new file mode 100644
index 0000000..dfd557ee
--- /dev/null
+++ b/lldb/test/API/commands/expression/po_persistent_result/main.m
@@ -0,0 +1,6 @@
+#import <objc/NSObject.h>
+
+int main() {
+ NSObject *obj = [NSObject new];
+ return 0; // break here
+}