Skip to content

Commit b362c97

Browse files
committed
[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
1 parent 50a3f0e commit b362c97

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,11 @@ class Completer : public clang::RecursiveASTVisitor<Completer> {
204204
llvm::DenseSet<clang::Decl *> m_completed;
205205

206206
bool ImportAndCheckCompletable(clang::Decl *decl) {
207-
(void)m_exporter.Import(decl);
207+
llvm::Expected<clang::Decl *> imported_decl = m_exporter.Import(decl);
208+
if (!imported_decl) {
209+
llvm::consumeError(imported_decl.takeError());
210+
return false;
211+
}
208212
if (m_completed.count(decl))
209213
return false;
210214
if (!llvm::isa<DeclContext>(decl))
@@ -225,7 +229,11 @@ class Completer : public clang::RecursiveASTVisitor<Completer> {
225229
void Complete(clang::Decl *decl) {
226230
m_completed.insert(decl);
227231
auto *decl_context = llvm::cast<DeclContext>(decl);
228-
(void)m_exporter.Import(decl);
232+
llvm::Expected<clang::Decl *> imported_decl = m_exporter.Import(decl);
233+
if (!imported_decl) {
234+
llvm::consumeError(imported_decl.takeError());
235+
return;
236+
}
229237
m_exporter.CompleteDecl(decl);
230238
for (Decl *child : decl_context->decls())
231239
if (ImportAndCheckCompletable(child))

0 commit comments

Comments
 (0)