@@ -1450,16 +1450,24 @@ class TypeRefBuilder {
1450
1450
(const char *)contextDescriptorFieldAddress,
1451
1451
*contextDescriptorOffset);
1452
1452
1453
- // Instead of a type descriptor this may just be a symbol reference, check that first
1453
+ // Instead of a type descriptor this may just be a reference to an external , check that first
1454
1454
if (auto symbol = OpaqueDynamicSymbolResolver (remote::RemoteAddress (contextTypeDescriptorAddress))) {
1455
1455
if (!symbol->isResolved ()) {
1456
- mangledTypeName = symbol->getSymbol ().str ();
1457
1456
Demangle::Context Ctx;
1458
1457
auto demangledRoot =
1459
- Ctx.demangleSymbolAsNode (mangledTypeName );
1458
+ Ctx.demangleSymbolAsNode (symbol-> getSymbol (). str () );
1460
1459
assert (demangledRoot->getKind () == Node::Kind::Global);
1461
- typeName =
1462
- nodeToString (demangledRoot->getChild (0 )->getChild (0 ));
1460
+ auto nomTypeDescriptorRoot = demangledRoot->getChild (0 );
1461
+ assert (nomTypeDescriptorRoot->getKind () == Node::Kind::NominalTypeDescriptor);
1462
+ auto typeRoot = nomTypeDescriptorRoot->getChild (0 );
1463
+ typeName = nodeToString (typeRoot);
1464
+
1465
+ auto typeMangling = Demangle::mangleNode (typeRoot);
1466
+ if (!typeMangling.isSuccess ())
1467
+ mangledTypeName = " " ;
1468
+ else
1469
+ mangledTypeName = typeMangling.result ();
1470
+
1463
1471
return std::make_pair (mangledTypeName, typeName);
1464
1472
} else if (symbol->getOffset ()) {
1465
1473
// If symbol is empty and has an offset, this is the resolved remote address
0 commit comments