summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/ClangUserExpression.cpp
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2013-08-23 00:36:14 +0000
committerSean Callanan <scallanan@apple.com>2013-08-23 00:36:14 +0000
commitffc12850cfd532f5879e7ac0cd456bd6e18236b7 (patch)
tree1c8d492c3d1cb3bd4347fdb69655d9df51877d4e /lldb/source/Expression/ClangUserExpression.cpp
parente5904417f268c03ccfb16b483958c7867edb1ef8 (diff)
downloadbcm5719-llvm-ffc12850cfd532f5879e7ac0cd456bd6e18236b7.tar.gz
bcm5719-llvm-ffc12850cfd532f5879e7ac0cd456bd6e18236b7.zip
Make sure that ClangExpressionDeclMap doesn't
live beyont parsing. This is important because all the ClangASTImporter::Minions for a parser's ASTContext are cleared when ClangExpressionDeclMap is deleted. This resolves many hard-to-reproduce crashes, especially ones involving breakpoint conditions. <rdar://problem/14775391> llvm-svn: 189080
Diffstat (limited to 'lldb/source/Expression/ClangUserExpression.cpp')
-rw-r--r--lldb/source/Expression/ClangUserExpression.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/lldb/source/Expression/ClangUserExpression.cpp b/lldb/source/Expression/ClangUserExpression.cpp
index 7f09f6fa094..1e52ce2828c 100644
--- a/lldb/source/Expression/ClangUserExpression.cpp
+++ b/lldb/source/Expression/ClangUserExpression.cpp
@@ -508,6 +508,9 @@ ClangUserExpression::Parse (Stream &error_stream,
if (!m_expr_decl_map->WillParse(exe_ctx, m_materializer_ap.get()))
{
error_stream.PutCString ("error: current process state is unsuitable for expression parsing\n");
+
+ m_expr_decl_map.reset(); // We are being careful here in the case of breakpoint conditions.
+
return false;
}
@@ -525,7 +528,7 @@ ClangUserExpression::Parse (Stream &error_stream,
{
error_stream.Printf ("error: %d errors parsing expression\n", num_errors);
- m_expr_decl_map->DidParse();
+ m_expr_decl_map.reset(); // We are being careful here in the case of breakpoint conditions.
return false;
}
@@ -540,6 +543,8 @@ ClangUserExpression::Parse (Stream &error_stream,
exe_ctx,
m_can_interpret,
execution_policy);
+
+ m_expr_decl_map.reset(); // Make this go away since we don't need any of its state after parsing. This also gets rid of any ClangASTImporter::Minions.
if (jit_error.Success())
{
OpenPOWER on IntegriCloud