Skip to content

Commit cd97949

Browse files
committed
Teach collectTypeInfo to deal with unresolved aliases.
1 parent 65a4dde commit cd97949

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,7 @@ static bool ContainsGenericTypeParameter(swift::Demangle::NodePointer node) {
10421042
static uint32_t collectTypeInfo(SwiftASTContext *module_holder,
10431043
swift::Demangle::Demangler &dem,
10441044
swift::Demangle::NodePointer node,
1045+
bool &unresolved_typealias,
10451046
bool generic_walk = false) {
10461047
LLDB_SCOPED_TIMER();
10471048
if (!node)
@@ -1073,7 +1074,8 @@ static uint32_t collectTypeInfo(SwiftASTContext *module_holder,
10731074
if ((type_class & eTypeClassBuiltin)) {
10741075
swift_flags &= ~eTypeIsStructUnion;
10751076
swift_flags |= collectTypeInfo(
1076-
module_holder, dem, GetClangTypeNode(clang_type, dem, module_holder));
1077+
module_holder, dem, GetClangTypeNode(clang_type, dem, module_holder),
1078+
unresolved_typealias);
10771079
return;
10781080
}
10791081
};
@@ -1253,6 +1255,11 @@ static uint32_t collectTypeInfo(SwiftASTContext *module_holder,
12531255
collect_clang_type(clang_type);
12541256
return swift_flags;
12551257
}
1258+
if (!node_clangtype.first) {
1259+
// If this is a typealias defined in the expression evaluator,
1260+
// then we don't have debug info to resolve it from.
1261+
unresolved_typealias = true;
1262+
}
12561263
swift_flags |= collectTypeInfo(module_holder, dem, node_clangtype.first,
12571264
generic_walk);
12581265
return swift_flags;
@@ -1267,7 +1274,8 @@ static uint32_t collectTypeInfo(SwiftASTContext *module_holder,
12671274

12681275
// Visit the child nodes.
12691276
for (unsigned i = 0; i < node->getNumChildren(); ++i)
1270-
swift_flags |= collectTypeInfo(module_holder, dem, node->getChild(i), generic_walk);
1277+
swift_flags |= collectTypeInfo(module_holder, dem, node->getChild(i),
1278+
unresolved_typealias, generic_walk);
12711279

12721280
return swift_flags;
12731281
}
@@ -2058,7 +2066,16 @@ uint32_t TypeSystemSwiftTypeRef::GetTypeInfo(
20582066
using namespace swift::Demangle;
20592067
Demangler dem;
20602068
NodePointer node = dem.demangleSymbol(AsMangledName(type));
2061-
return collectTypeInfo(m_swift_ast_context, dem, node);
2069+
bool unresolved_typealias = false;
2070+
uint32_t flags =
2071+
collectTypeInfo(m_swift_ast_context, dem, node, unresolved_typealias);
2072+
if (unresolved_typealias) {
2073+
// If this is a typealias defined in the expression evaluator,
2074+
// then we don't have debug info to resolve it from.
2075+
return m_swift_ast_context->GetTypeInfo(ReconstructType(type),
2076+
pointee_or_element_clang_type);
2077+
}
2078+
return flags;
20622079
};
20632080

20642081
VALIDATE_AND_RETURN(impl, GetTypeInfo, type, (ReconstructType(type), nullptr),

0 commit comments

Comments
 (0)