@@ -66,7 +66,8 @@ irgen::emitArchetypeTypeMetadataRef(IRGenFunction &IGF,
66
66
// If this is an opaque archetype, we'll need to instantiate using its
67
67
// descriptor.
68
68
if (auto opaque = dyn_cast<OpaqueTypeArchetypeType>(archetype)) {
69
- return emitOpaqueTypeMetadataRef (IGF, opaque, request);
69
+ if (opaque->isRoot ())
70
+ return emitOpaqueTypeMetadataRef (IGF, opaque, request);
70
71
}
71
72
72
73
// If there's no local or opaque metadata, it must be a nested type.
@@ -508,9 +509,11 @@ MetadataResponse irgen::emitOpaqueTypeMetadataRef(IRGenFunction &IGF,
508
509
DynamicMetadataRequest request) {
509
510
auto accessorFn = IGF.IGM .getGetOpaqueTypeMetadataFn ();
510
511
auto opaqueDecl = archetype->getDecl ();
511
-
512
+ auto genericParam = archetype->getInterfaceType ()
513
+ ->castTo <GenericTypeParamType>();
512
514
auto *descriptor = getAddressOfOpaqueTypeDescriptor (IGF, opaqueDecl);
513
- auto indexValue = llvm::ConstantInt::get (IGF.IGM .SizeTy , 0 );
515
+ auto indexValue = llvm::ConstantInt::get (
516
+ IGF.IGM .SizeTy , genericParam->getIndex ());
514
517
515
518
llvm::CallInst *result = nullptr ;
516
519
withOpaqueTypeGenericArgs (IGF, archetype,
0 commit comments