diff --git a/lldb/source/Plugins/ExpressionParser/Swift/SwiftASTManipulator.cpp b/lldb/source/Plugins/ExpressionParser/Swift/SwiftASTManipulator.cpp index 6cdd41b0219c1..622bf74585e1e 100644 --- a/lldb/source/Plugins/ExpressionParser/Swift/SwiftASTManipulator.cpp +++ b/lldb/source/Plugins/ExpressionParser/Swift/SwiftASTManipulator.cpp @@ -848,11 +848,15 @@ GetPatternBindingForVarDecl(swift::VarDecl *var_decl, // Since lldb does not call bindExtensions, must ensure that any enclosing // extension is bound + // FIXME: This won't correctly handle cases that rely on other extensions + // being bound first, e.g for nested types defined in extensions. for (auto *context = containing_context; context; context = context->getParent()) { if (auto *d = context->getAsDecl()) { - if (auto *ext = swift::dyn_cast(d)) - ext->computeExtendedNominal(); + if (auto *ext = swift::dyn_cast(d)) { + if (!ext->hasBeenBound()) + ext->setExtendedNominal(ext->computeExtendedNominal()); + } } } swift::Type type = containing_context->mapTypeIntoContext(