diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-07-23 21:14:41 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-07-23 21:14:41 +0000 |
commit | b362c976fb7d25f3eb4a5297abbad5489ea8deef (patch) | |
tree | 770299ad80a0137b2774f55fda7d29dee016982b | |
parent | 50a3f0e08e3597f49f0c66e9f6b6181fccf154ff (diff) | |
download | bcm5719-llvm-b362c976fb7d25f3eb4a5297abbad5489ea8deef.tar.gz bcm5719-llvm-b362c976fb7d25f3eb4a5297abbad5489ea8deef.zip |
[ExpressionParser] Handle llvm::Expected result
This fixes the unchecked-error assertion at runtime.
Expected<T> must be checked before access or destruction. Expected<T>
value was in success state. (Note: Expected<T> values in success mode
must still be checked prior to being destroyed).
llvm-svn: 366853
-rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 5b10b585620..e95a0305cd1 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -204,7 +204,11 @@ private: llvm::DenseSet<clang::Decl *> m_completed; bool ImportAndCheckCompletable(clang::Decl *decl) { - (void)m_exporter.Import(decl); + llvm::Expected<clang::Decl *> imported_decl = m_exporter.Import(decl); + if (!imported_decl) { + llvm::consumeError(imported_decl.takeError()); + return false; + } if (m_completed.count(decl)) return false; if (!llvm::isa<DeclContext>(decl)) @@ -225,7 +229,11 @@ private: void Complete(clang::Decl *decl) { m_completed.insert(decl); auto *decl_context = llvm::cast<DeclContext>(decl); - (void)m_exporter.Import(decl); + llvm::Expected<clang::Decl *> imported_decl = m_exporter.Import(decl); + if (!imported_decl) { + llvm::consumeError(imported_decl.takeError()); + return; + } m_exporter.CompleteDecl(decl); for (Decl *child : decl_context->decls()) if (ImportAndCheckCompletable(child)) |