@@ -207,7 +207,14 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
207207 void visitConsumingAttr (ConsumingAttr *attr) { visitMutationAttr (attr); }
208208 void visitLegacyConsumingAttr (LegacyConsumingAttr *attr) { visitMutationAttr (attr); }
209209 void visitResultDependsOnSelfAttr (ResultDependsOnSelfAttr *attr) {
210- visitMutationAttr (attr);
210+ FuncDecl *FD = cast<FuncDecl>(D);
211+ if (FD->getDescriptiveKind () != DescriptiveDeclKind::Method) {
212+ diagnoseAndRemoveAttr (attr, diag::attr_methods_only, attr);
213+ }
214+ if (FD->getResultTypeRepr () == nullptr ) {
215+ diagnoseAndRemoveAttr (attr, diag::result_depends_on_no_result,
216+ attr->getAttrName ());
217+ }
211218 }
212219 void visitDynamicAttr (DynamicAttr *attr);
213220
@@ -486,9 +493,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
486493 case DeclAttrKind::DAK_Borrowing:
487494 attrModifier = SelfAccessKind::Borrowing;
488495 break ;
489- case DeclAttrKind::DAK_ResultDependsOnSelf:
490- attrModifier = SelfAccessKind::ResultDependsOnSelf;
491- break ;
492496 default :
493497 llvm_unreachable (" unhandled attribute kind" );
494498 }
@@ -503,7 +507,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
503507 case SelfAccessKind::Consuming:
504508 case SelfAccessKind::LegacyConsuming:
505509 case SelfAccessKind::Borrowing:
506- case SelfAccessKind::ResultDependsOnSelf:
507510 // It's still OK to specify the ownership convention of methods in
508511 // classes.
509512 break ;
@@ -535,8 +538,7 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
535538 FD->getAttrs ().hasAttribute <NonMutatingAttr>() +
536539 FD->getAttrs ().hasAttribute <LegacyConsumingAttr>() +
537540 FD->getAttrs ().hasAttribute <ConsumingAttr>() +
538- FD->getAttrs ().hasAttribute <BorrowingAttr>() +
539- FD->getAttrs ().hasAttribute <ResultDependsOnSelfAttr>()) > 1 ) {
541+ FD->getAttrs ().hasAttribute <BorrowingAttr>()) > 1 ) {
540542 if (auto *NMA = FD->getAttrs ().getAttribute <NonMutatingAttr>()) {
541543 if (attrModifier != SelfAccessKind::NonMutating) {
542544 diagnoseAndRemoveAttr (NMA, diag::functions_mutating_and_not,
@@ -571,24 +573,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
571573 SelfAccessKind::Borrowing, attrModifier);
572574 }
573575 }
574-
575- if (auto *RDSA = FD->getAttrs ().getAttribute <ResultDependsOnSelfAttr>()) {
576- if (attrModifier != SelfAccessKind::ResultDependsOnSelf) {
577- diagnoseAndRemoveAttr (RDSA, diag::functions_mutating_and_not,
578- SelfAccessKind::ResultDependsOnSelf,
579- attrModifier);
580- }
581- }
582- }
583-
584- if (auto *RDSA = FD->getAttrs ().getAttribute <ResultDependsOnSelfAttr>()) {
585- if (FD->getResultTypeRepr () == nullptr ) {
586- diagnoseAndRemoveAttr (RDSA, diag::result_depends_on_no_result,
587- attr->getAttrName ());
588- }
589- if (FD->getDescriptiveKind () != DescriptiveDeclKind::Method) {
590- diagnoseAndRemoveAttr (RDSA, diag::attr_methods_only, attr);
591- }
592576 }
593577 // Verify that we don't have a static function.
594578 if (FD->isStatic ())
0 commit comments