@@ -511,64 +511,60 @@ Decl::getActiveAvailableAttrForCurrentPlatform(bool ignoreAppExtensions) const {
511511 return bestAttr;
512512}
513513
514- const AvailableAttr * Decl::getDeprecatedAttr () const {
514+ std::optional<SemanticAvailableAttr> Decl::getDeprecatedAttr () const {
515515 auto &ctx = getASTContext ();
516- const AvailableAttr * result = nullptr ;
516+ std::optional<SemanticAvailableAttr> result;
517517 auto bestActive = getActiveAvailableAttrForCurrentPlatform ();
518518
519- for (auto semanticAttr :
520- getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
521- auto attr = semanticAttr.getParsedAttr ();
522-
523- if (attr->hasPlatform () && (!bestActive || semanticAttr != bestActive))
519+ for (auto attr : getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
520+ if (attr.isPlatformSpecific () && (!bestActive || attr != bestActive))
524521 continue ;
525522
526523 // Unconditional deprecated.
527- if (attr-> isUnconditionallyDeprecated ())
524+ if (attr. isUnconditionallyDeprecated ())
528525 return attr;
529526
530- std::optional<llvm::VersionTuple> deprecatedVersion = attr-> Deprecated ;
527+ auto deprecatedVersion = attr. getDeprecated () ;
531528
532529 StringRef deprecatedPlatform;
533530 llvm::VersionTuple remappedDeprecatedVersion;
534531 if (AvailabilityInference::updateDeprecatedPlatformForFallback (
535- attr, ctx, deprecatedPlatform, remappedDeprecatedVersion))
532+ attr.getParsedAttr (), ctx, deprecatedPlatform,
533+ remappedDeprecatedVersion))
536534 deprecatedVersion = remappedDeprecatedVersion;
537535
538536 if (!deprecatedVersion.has_value ())
539537 continue ;
540538
541- llvm::VersionTuple minVersion = semanticAttr .getActiveVersion (ctx);
539+ llvm::VersionTuple minVersion = attr .getActiveVersion (ctx);
542540
543541 // We treat the declaration as deprecated if it is deprecated on
544542 // all deployment targets.
545543 if (deprecatedVersion.value () <= minVersion) {
546- result = attr;
544+ result. emplace ( attr) ;
547545 }
548546 }
549547 return result;
550548}
551549
552- const AvailableAttr * Decl::getSoftDeprecatedAttr () const {
550+ std::optional<SemanticAvailableAttr> Decl::getSoftDeprecatedAttr () const {
553551 auto &ctx = getASTContext ();
554- const AvailableAttr * result = nullptr ;
552+ std::optional<SemanticAvailableAttr> result;
555553 auto bestActive = getActiveAvailableAttrForCurrentPlatform ();
556554
557- for (auto semanticAttr :
558- getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
559- auto attr = semanticAttr.getParsedAttr ();
560-
561- if (attr->hasPlatform () && (!bestActive || semanticAttr != bestActive))
555+ for (auto attr : getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
556+ if (attr.isPlatformSpecific () && (!bestActive || attr != bestActive))
562557 continue ;
563558
564- std::optional<llvm::VersionTuple> deprecatedVersion = attr->Deprecated ;
559+ // FIXME: This needs to do a version remap.
560+ auto deprecatedVersion = attr.getDeprecated ();
565561 if (!deprecatedVersion.has_value ())
566562 continue ;
567563
568- llvm::VersionTuple activeVersion = semanticAttr .getActiveVersion (ctx);
564+ llvm::VersionTuple activeVersion = attr .getActiveVersion (ctx);
569565
570566 if (deprecatedVersion.value () > activeVersion)
571- result = attr;
567+ result. emplace ( attr) ;
572568 }
573569 return result;
574570}
0 commit comments