Fix a crash in expressions with fixits in the dummy target.

In the expression command, if the target is NULL, you have to use the dummy
target.

<rdar://problem/28811687>

llvm-svn: 284439
This commit is contained in:
Jim Ingham 2016-10-17 23:59:41 +00:00
parent 0d31d9c012
commit 981da8d37b
2 changed files with 12 additions and 2 deletions

View File

@ -23,11 +23,18 @@ class ExprCommandWithFixits(TestBase):
self.main_source_spec = lldb.SBFileSpec(self.main_source)
@skipUnlessDarwin
def test(self):
"""Test calling a function that throws and ObjC exception."""
def test_with_target(self):
"""Test calling expressions with errors that can be fixed by the FixIts."""
self.build()
self.try_expressions()
def test_with_dummy_target(self):
"""Test calling expressions in the dummy target with errors that can be fixed by the FixIts."""
ret_val = lldb.SBCommandReturnObject()
result = self.dbg.GetCommandInterpreter().HandleCommand("expression ((1 << 16) - 1))", ret_val)
self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "The expression was successful.")
self.assertTrue("Fix-it applied" in ret_val.GetError(), "Found the applied FixIt.")
def try_expressions(self):
"""Test calling expressions with errors that can be fixed by the FixIts."""
exe_name = "a.out"

View File

@ -614,6 +614,9 @@ bool CommandObjectExpression::DoExecute(const char *command,
if (EvaluateExpression(expr, &(result.GetOutputStream()),
&(result.GetErrorStream()), &result)) {
Target *target = m_interpreter.GetExecutionContext().GetTargetPtr();
if (!target)
target = GetDummyTarget();
if (!m_fixed_expression.empty() && target->GetEnableNotifyAboutFixIts()) {
CommandHistory &history = m_interpreter.GetCommandHistory();
// FIXME: Can we figure out what the user actually typed (e.g. some alias