diff options
| author | Adrian Prantl <aprantl@apple.com> | 2020-01-08 14:18:47 -0800 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2020-01-10 08:52:46 -0800 |
| commit | e9331a56fead1823d528d6412828fb9e16fd62ff (patch) | |
| tree | 0532d62035494c012cd196e24065418c6eed7c62 /lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp | |
| parent | bdd88b7ed3956534a0a71b1ea2bc88c69d48f9b7 (diff) | |
| download | bcm5719-llvm-e9331a56fead1823d528d6412828fb9e16fd62ff.tar.gz bcm5719-llvm-e9331a56fead1823d528d6412828fb9e16fd62ff.zip | |
Add missing nullptr checks.
GetPersistentExpressionStateForLanguage() can return a nullptr if it
cannot construct a typesystem. This patch adds missing nullptr checks
at all uses.
Inspired by rdar://problem/58317195
Differential Revision: https://reviews.llvm.org/D72413
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp')
| -rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 6634824be01..a302a73cafc 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -126,7 +126,7 @@ void ClangExpressionDeclMap::InstallCodeGenerator( } void ClangExpressionDeclMap::DidParse() { - if (m_parser_vars) { + if (m_parser_vars && m_parser_vars->m_persistent_vars) { for (size_t entity_index = 0, num_entities = m_found_entities.GetSize(); entity_index < num_entities; ++entity_index) { ExpressionVariableSP var_sp( @@ -262,6 +262,9 @@ bool ClangExpressionDeclMap::AddPersistentVariable(const NamedDecl *decl, if (!m_parser_vars->m_target_info.IsValid()) return false; + if (!m_parser_vars->m_persistent_vars) + return false; + ClangExpressionVariable *var = llvm::cast<ClangExpressionVariable>( m_parser_vars->m_persistent_vars ->CreatePersistentVariable( @@ -327,7 +330,7 @@ bool ClangExpressionDeclMap::AddValueToStruct(const NamedDecl *decl, ClangExpressionVariable *var(ClangExpressionVariable::FindVariableInList( m_found_entities, decl, GetParserID())); - if (!var) { + if (!var && m_parser_vars->m_persistent_vars) { var = ClangExpressionVariable::FindVariableInList( *m_parser_vars->m_persistent_vars, decl, GetParserID()); is_persistent_variable = true; @@ -733,6 +736,8 @@ clang::NamedDecl *ClangExpressionDeclMap::GetPersistentDecl(ConstString name) { ClangASTContext::GetScratch(*target); + if (!m_parser_vars->m_persistent_vars) + return nullptr; return m_parser_vars->m_persistent_vars->GetPersistentDecl(name); } @@ -1390,7 +1395,7 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( return; // No ParserVars means we can't do register or variable lookup. - if (!m_parser_vars) + if (!m_parser_vars || !m_parser_vars->m_persistent_vars) return; ExpressionVariableSP pvar_sp( |

