@@ -3982,8 +3982,9 @@ TypeResolver::resolveASTFunctionTypeParams(TupleTypeRepr *inputRepr,
39823982 }
39833983
39843984 // Validate the presence of ownership for a noncopyable parameter.
3985+ // FIXME: This won't diagnose if the type contains unbound generics.
39853986 if (inStage (TypeResolutionStage::Interface)
3986- && !ty->hasUnboundGenericType ()) {
3987+ && !ty->hasUnboundGenericType () && !ty-> hasTypeVariable () ) {
39873988 diagnoseMissingOwnership (ownership, eltTypeRepr, ty, resolution);
39883989
39893990 // @_staticExclusiveOnly types cannot be passed as 'inout' in function
@@ -5804,6 +5805,7 @@ NeverNullType TypeResolver::resolveVarargType(VarargTypeRepr *repr,
58045805 }
58055806
58065807 // do not allow move-only types as the element of a vararg
5808+ // FIXME: This does not correctly handle type variables and unbound generics.
58075809 if (inStage (TypeResolutionStage::Interface)) {
58085810 auto contextTy = GenericEnvironment::mapTypeIntoContext (
58095811 resolution.getGenericSignature ().getGenericEnvironment (), element);
@@ -5990,6 +5992,7 @@ NeverNullType TypeResolver::resolveTupleType(TupleTypeRepr *repr,
59905992 // Track the presence of a noncopyable field for diagnostic purposes only.
59915993 // We don't need to re-diagnose if a tuple contains another tuple, though,
59925994 // since we should've diagnosed the inner tuple already.
5995+ // FIXME: This won't diagnose if the type contains unbound generics
59935996 if (!ctx.LangOpts .hasFeature (Feature::MoveOnlyTuples) &&
59945997 !options.contains (TypeResolutionFlags::SILMode) &&
59955998 inStage (TypeResolutionStage::Interface) &&
0 commit comments