@@ -2658,17 +2658,21 @@ Type TypeResolver::resolveOpaqueReturnType(TypeRepr *repr,
2658
2658
if (auto generic = dyn_cast<GenericIdentTypeRepr>(repr)) {
2659
2659
for (auto argRepr : generic->getGenericArgs ()) {
2660
2660
auto argTy = resolveType (argRepr, options);
2661
- if (!argTy)
2662
- return Type ();
2661
+ // If we cannot resolve the generic parameter, propagate the error out.
2662
+ if (!argTy || argTy->hasError ()) {
2663
+ return ErrorType::get (Context);
2664
+ }
2663
2665
TypeArgsBuf.push_back (argTy);
2664
2666
}
2665
2667
}
2666
2668
2667
2669
// Use type reconstruction to summon the opaque type decl.
2668
2670
Demangler demangle;
2669
2671
auto definingDeclNode = demangle.demangleSymbol (mangledName);
2670
- if (!definingDeclNode)
2671
- return Type ();
2672
+ if (!definingDeclNode) {
2673
+ diagnose (repr->getLoc (), diag::no_opaque_return_type_of);
2674
+ return ErrorType::get (Context);
2675
+ }
2672
2676
if (definingDeclNode->getKind () == Node::Kind::Global)
2673
2677
definingDeclNode = definingDeclNode->getChild (0 );
2674
2678
ASTBuilder builder (Context);
@@ -2678,8 +2682,9 @@ Type TypeResolver::resolveOpaqueReturnType(TypeRepr *repr,
2678
2682
2679
2683
auto TypeArgs = ArrayRef<Type>(TypeArgsBuf);
2680
2684
auto ty = builder.resolveOpaqueType (opaqueNode, TypeArgs, ordinal);
2681
- if (!ty) {
2685
+ if (!ty || ty-> hasError () ) {
2682
2686
diagnose (repr->getLoc (), diag::no_opaque_return_type_of);
2687
+ return ErrorType::get (Context);
2683
2688
}
2684
2689
return ty;
2685
2690
}
0 commit comments