@@ -2148,6 +2148,8 @@ namespace {
21482148 TypeResolutionOptions options);
21492149 NeverNullType resolveResultDependsOnTypeRepr (ResultDependsOnTypeRepr *repr,
21502150 TypeResolutionOptions options);
2151+ NeverNullType resolveLifetimeDependentReturnTypeRepr (
2152+ LifetimeDependentReturnTypeRepr *repr, TypeResolutionOptions options);
21512153 NeverNullType resolveArrayType (ArrayTypeRepr *repr,
21522154 TypeResolutionOptions options);
21532155 NeverNullType resolveDictionaryType (DictionaryTypeRepr *repr,
@@ -2638,10 +2640,9 @@ NeverNullType TypeResolver::resolveType(TypeRepr *repr,
26382640 return resolveResultDependsOnTypeRepr (cast<ResultDependsOnTypeRepr>(repr),
26392641 options);
26402642
2641- case TypeReprKind::LifetimeDependentReturn: {
2642- auto lifetimeDependenceRepr = cast<LifetimeDependentReturnTypeRepr>(repr);
2643- return resolveType (lifetimeDependenceRepr->getBase (), options);
2644- }
2643+ case TypeReprKind::LifetimeDependentReturn:
2644+ return resolveLifetimeDependentReturnTypeRepr (
2645+ cast<LifetimeDependentReturnTypeRepr>(repr), options);
26452646 }
26462647 llvm_unreachable (" all cases should be handled" );
26472648}
@@ -4605,6 +4606,18 @@ TypeResolver::resolveResultDependsOnTypeRepr(ResultDependsOnTypeRepr *repr,
46054606 return resolveType (repr->getBase (), options);
46064607}
46074608
4609+ NeverNullType TypeResolver::resolveLifetimeDependentReturnTypeRepr (
4610+ LifetimeDependentReturnTypeRepr *repr, TypeResolutionOptions options) {
4611+
4612+ if (!options.is (TypeResolverContext::FunctionResult)) {
4613+ diagnoseInvalid (
4614+ repr, repr->getSpecifierLoc (),
4615+ diag::lifetime_dependence_only_on_function_method_init_result);
4616+ return ErrorType::get (getASTContext ());
4617+ }
4618+ return resolveType (repr->getBase (), options);
4619+ }
4620+
46084621NeverNullType
46094622TypeResolver::resolveDictionaryType (DictionaryTypeRepr *repr,
46104623 TypeResolutionOptions options) {
0 commit comments