@@ -4841,17 +4841,19 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
48414841 return isSimpleUnderPrintOptions (typealias->getSinglyDesugaredType ());
48424842 } else if (auto opaque =
48434843 dyn_cast<OpaqueTypeArchetypeType>(T.getPointer ())) {
4844- switch (Options.OpaqueReturnTypePrinting ) {
4845- case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
4846- case PrintOptions::OpaqueReturnTypePrintingMode::Description:
4847- return true ;
4848- case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
4849- return opaque->getDecl ()->hasExplicitGenericParams ();
4850- case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword:
4851- return opaque->getDecl ()->hasExplicitGenericParams () ||
4852- isSimpleUnderPrintOptions (opaque->getExistentialType ());
4844+ if (opaque->isRoot ()) {
4845+ switch (Options.OpaqueReturnTypePrinting ) {
4846+ case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
4847+ case PrintOptions::OpaqueReturnTypePrintingMode::Description:
4848+ return true ;
4849+ case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
4850+ return opaque->getDecl ()->hasExplicitGenericParams ();
4851+ case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword:
4852+ return opaque->getDecl ()->hasExplicitGenericParams () ||
4853+ isSimpleUnderPrintOptions (opaque->getExistentialType ());
4854+ }
4855+ llvm_unreachable (" bad opaque-return-type printing mode" );
48534856 }
4854- llvm_unreachable (" bad opaque-return-type printing mode" );
48554857 } else if (auto existential = dyn_cast<ExistentialType>(T.getPointer ())) {
48564858 if (!Options.PrintExplicitAny )
48574859 return isSimpleUnderPrintOptions (existential->getConstraintType ());
0 commit comments