@@ -203,7 +203,14 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
203203 void visitConsumingAttr (ConsumingAttr *attr) { visitMutationAttr (attr); }
204204 void visitLegacyConsumingAttr (LegacyConsumingAttr *attr) { visitMutationAttr (attr); }
205205 void visitResultDependsOnSelfAttr (ResultDependsOnSelfAttr *attr) {
206- visitMutationAttr (attr);
206+ FuncDecl *FD = cast<FuncDecl>(D);
207+ if (FD->getDescriptiveKind () != DescriptiveDeclKind::Method) {
208+ diagnoseAndRemoveAttr (attr, diag::attr_methods_only, attr);
209+ }
210+ if (FD->getResultTypeRepr () == nullptr ) {
211+ diagnoseAndRemoveAttr (attr, diag::result_depends_on_no_result,
212+ attr->getAttrName ());
213+ }
207214 }
208215 void visitDynamicAttr (DynamicAttr *attr);
209216
@@ -473,9 +480,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
473480 case DeclAttrKind::DAK_Borrowing:
474481 attrModifier = SelfAccessKind::Borrowing;
475482 break ;
476- case DeclAttrKind::DAK_ResultDependsOnSelf:
477- attrModifier = SelfAccessKind::ResultDependsOnSelf;
478- break ;
479483 default :
480484 llvm_unreachable (" unhandled attribute kind" );
481485 }
@@ -490,7 +494,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
490494 case SelfAccessKind::Consuming:
491495 case SelfAccessKind::LegacyConsuming:
492496 case SelfAccessKind::Borrowing:
493- case SelfAccessKind::ResultDependsOnSelf:
494497 // It's still OK to specify the ownership convention of methods in
495498 // classes.
496499 break ;
@@ -522,8 +525,7 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
522525 FD->getAttrs ().hasAttribute <NonMutatingAttr>() +
523526 FD->getAttrs ().hasAttribute <LegacyConsumingAttr>() +
524527 FD->getAttrs ().hasAttribute <ConsumingAttr>() +
525- FD->getAttrs ().hasAttribute <BorrowingAttr>() +
526- FD->getAttrs ().hasAttribute <ResultDependsOnSelfAttr>()) > 1 ) {
528+ FD->getAttrs ().hasAttribute <BorrowingAttr>()) > 1 ) {
527529 if (auto *NMA = FD->getAttrs ().getAttribute <NonMutatingAttr>()) {
528530 if (attrModifier != SelfAccessKind::NonMutating) {
529531 diagnoseAndRemoveAttr (NMA, diag::functions_mutating_and_not,
@@ -558,24 +560,6 @@ void AttributeChecker::visitMutationAttr(DeclAttribute *attr) {
558560 SelfAccessKind::Borrowing, attrModifier);
559561 }
560562 }
561-
562- if (auto *RDSA = FD->getAttrs ().getAttribute <ResultDependsOnSelfAttr>()) {
563- if (attrModifier != SelfAccessKind::ResultDependsOnSelf) {
564- diagnoseAndRemoveAttr (RDSA, diag::functions_mutating_and_not,
565- SelfAccessKind::ResultDependsOnSelf,
566- attrModifier);
567- }
568- }
569- }
570-
571- if (auto *RDSA = FD->getAttrs ().getAttribute <ResultDependsOnSelfAttr>()) {
572- if (FD->getResultTypeRepr () == nullptr ) {
573- diagnoseAndRemoveAttr (RDSA, diag::result_depends_on_no_result,
574- attr->getAttrName ());
575- }
576- if (FD->getDescriptiveKind () != DescriptiveDeclKind::Method) {
577- diagnoseAndRemoveAttr (RDSA, diag::attr_methods_only, attr);
578- }
579563 }
580564 // Verify that we don't have a static function.
581565 if (FD->isStatic ())
0 commit comments