Fixed an issue that was causing us to crash when evaluating expressions for
objective C or C++ methods when "self" or "this" were in scope, but had
invalid locations in a DWARF location list. The lack of a valid value caused
us to use an invalid type value and then we tried to import that invalid
value and we would crash.
llvm-svn: 134518
diff --git a/lldb/source/Symbol/ClangASTImporter.cpp b/lldb/source/Symbol/ClangASTImporter.cpp
index 84a765a..851ad1d 100644
--- a/lldb/source/Symbol/ClangASTImporter.cpp
+++ b/lldb/source/Symbol/ClangASTImporter.cpp
@@ -18,23 +18,26 @@
ClangASTImporter::CopyType (clang::ASTContext *src_ast,
clang::QualType type)
{
- MinionSP minion = GetMinion(src_ast, false);
-
- return minion->Import(type);
+ MinionSP minion_sp (GetMinion(src_ast, false));
+ if (minion_sp)
+ return minion_sp->Import(type);
+ return QualType();
}
clang::Decl *
ClangASTImporter::CopyDecl (clang::ASTContext *src_ast,
clang::Decl *decl)
{
- MinionSP minion;
+ MinionSP minion_sp;
if (isa<clang::NamespaceDecl>(decl))
- minion = GetMinion(src_ast, true);
+ minion_sp = GetMinion(src_ast, true);
else
- minion = GetMinion(src_ast, false);
+ minion_sp = GetMinion(src_ast, false);
- return minion->Import(decl);
+ if (minion_sp)
+ return minion_sp->Import(decl);
+ return NULL;
}
const clang::DeclContext *
@@ -53,9 +56,9 @@
if (!ClangASTContext::GetCompleteDecl(context_decl_origin.ctx, context_decl_origin.decl))
return NULL;
- MinionSP minion = GetMinion(context_decl_origin.ctx, false);
-
- minion->ImportDefinition(context_decl_origin.decl);
+ MinionSP minion_sp (GetMinion(context_decl_origin.ctx, false));
+ if (minion_sp)
+ minion_sp->ImportDefinition(context_decl_origin.decl);
return decl_context;
}