@@ -66,7 +66,8 @@ irgen::emitArchetypeTypeMetadataRef(IRGenFunction &IGF,
6666 // If this is an opaque archetype, we'll need to instantiate using its
6767 // descriptor.
6868 if (auto opaque = dyn_cast<OpaqueTypeArchetypeType>(archetype)) {
69- return emitOpaqueTypeMetadataRef (IGF, opaque, request);
69+ if (opaque->isRoot ())
70+ return emitOpaqueTypeMetadataRef (IGF, opaque, request);
7071 }
7172
7273 // If there's no local or opaque metadata, it must be a nested type.
@@ -508,9 +509,11 @@ MetadataResponse irgen::emitOpaqueTypeMetadataRef(IRGenFunction &IGF,
508509 DynamicMetadataRequest request) {
509510 auto accessorFn = IGF.IGM .getGetOpaqueTypeMetadataFn ();
510511 auto opaqueDecl = archetype->getDecl ();
511-
512+ auto genericParam = archetype->getInterfaceType ()
513+ ->castTo <GenericTypeParamType>();
512514 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 ());
514517
515518 llvm::CallInst *result = nullptr ;
516519 withOpaqueTypeGenericArgs (IGF, archetype,
0 commit comments