Fixed a problem in the expression parser that
caused the IR interpreter not to work if the
process had finished running.
<rdar://problem/14124301>
llvm-svn: 184125
diff --git a/lldb/source/Expression/IRMemoryMap.cpp b/lldb/source/Expression/IRMemoryMap.cpp
index e3f6178..e2d4e28 100644
--- a/lldb/source/Expression/IRMemoryMap.cpp
+++ b/lldb/source/Expression/IRMemoryMap.cpp
@@ -54,7 +54,7 @@
lldb::addr_t ret = LLDB_INVALID_ADDRESS;
- if (process_sp && process_sp->CanJIT())
+ if (process_sp && process_sp->CanJIT() && process_sp->IsAlive())
{
Error alloc_error;
@@ -285,7 +285,7 @@
break;
case eAllocationPolicyMirror:
process_sp = m_process_wp.lock();
- if (process_sp && process_sp->CanJIT())
+ if (process_sp && process_sp->CanJIT() && process_sp->IsAlive())
{
allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
if (!error.Success())
@@ -307,7 +307,7 @@
process_sp = m_process_wp.lock();
if (process_sp)
{
- if (process_sp->CanJIT())
+ if (process_sp->CanJIT() && process_sp->IsAlive())
{
allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
if (!error.Success())
@@ -414,7 +414,7 @@
lldb::ProcessSP process_sp = m_process_wp.lock();
if (process_sp)
{
- if (process_sp->CanJIT())
+ if (process_sp->CanJIT() && process_sp->IsAlive())
process_sp->DeallocateMemory(allocation.m_process_alloc); // FindSpace allocated this for real
else
process_sp->GetReservationCache().Unreserve(allocation.m_process_alloc); // FindSpace registered this memory