@@ -2148,6 +2148,8 @@ namespace {
2148
2148
TypeResolutionOptions options);
2149
2149
NeverNullType resolveResultDependsOnTypeRepr (ResultDependsOnTypeRepr *repr,
2150
2150
TypeResolutionOptions options);
2151
+ NeverNullType resolveLifetimeDependentReturnTypeRepr (
2152
+ LifetimeDependentReturnTypeRepr *repr, TypeResolutionOptions options);
2151
2153
NeverNullType resolveArrayType (ArrayTypeRepr *repr,
2152
2154
TypeResolutionOptions options);
2153
2155
NeverNullType resolveDictionaryType (DictionaryTypeRepr *repr,
@@ -2638,10 +2640,9 @@ NeverNullType TypeResolver::resolveType(TypeRepr *repr,
2638
2640
return resolveResultDependsOnTypeRepr (cast<ResultDependsOnTypeRepr>(repr),
2639
2641
options);
2640
2642
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);
2645
2646
}
2646
2647
llvm_unreachable (" all cases should be handled" );
2647
2648
}
@@ -4605,6 +4606,18 @@ TypeResolver::resolveResultDependsOnTypeRepr(ResultDependsOnTypeRepr *repr,
4605
4606
return resolveType (repr->getBase (), options);
4606
4607
}
4607
4608
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
+
4608
4621
NeverNullType
4609
4622
TypeResolver::resolveDictionaryType (DictionaryTypeRepr *repr,
4610
4623
TypeResolutionOptions options) {
0 commit comments