@@ -69,28 +69,38 @@ void TBDGenVisitor::addSymbolInternal(StringRef name,
69
69
}
70
70
}
71
71
72
+ static Optional<llvm::VersionTuple> getDeclMoveOSVersion (Decl *D) {
73
+ for (auto *attr: D->getAttrs ()) {
74
+ if (auto *ODA = dyn_cast<OriginallyDefinedInAttr>(attr)) {
75
+ if (ODA->isActivePlatform (D->getASTContext ()))
76
+ return ODA->MovedVersion ;
77
+ }
78
+ }
79
+ return None;
80
+ }
81
+
72
82
void TBDGenVisitor::addLinkerDirectiveSymbols (StringRef name,
73
83
llvm::MachO::SymbolKind kind) {
74
84
if (kind != llvm::MachO::SymbolKind::GlobalSymbol)
75
85
return ;
76
86
if (!TopLevelDecl)
77
87
return ;
78
- auto ODA = TopLevelDecl-> getAttrs (). getAttribute <OriginallyDefinedInAttr>( );
79
- if (!ODA )
88
+ auto MovedVer = getDeclMoveOSVersion (TopLevelDecl );
89
+ if (!MovedVer. hasValue () )
80
90
return ;
91
+ assert (MovedVer.hasValue ());
81
92
unsigned Major[2 ];
82
93
unsigned Minor[2 ];
83
- Major[1 ] = ODA->MovedVersion .getMajor ();
84
- Minor[1 ] = ODA->MovedVersion .getMinor ().hasValue () ?
85
- *ODA->MovedVersion .getMinor (): 0 ;
94
+ Major[1 ] = MovedVer->getMajor ();
95
+ Minor[1 ] = MovedVer->getMinor ().hasValue () ? *MovedVer->getMinor (): 0 ;
86
96
auto AvailRange = AvailabilityInference::availableRange (TopLevelDecl,
87
97
TopLevelDecl->getASTContext ()).getOSVersion ();
88
98
assert (AvailRange.hasLowerEndpoint () &&
89
99
" cannot find the start point of availability" );
90
100
if (!AvailRange.hasLowerEndpoint ())
91
101
return ;
92
- assert (AvailRange.getLowerEndpoint () < ODA-> MovedVersion );
93
- if (AvailRange.getLowerEndpoint () >= ODA-> MovedVersion )
102
+ assert (AvailRange.getLowerEndpoint () < *MovedVer );
103
+ if (AvailRange.getLowerEndpoint () >= *MovedVer )
94
104
return ;
95
105
Major[0 ] = AvailRange.getLowerEndpoint ().getMajor ();
96
106
Minor[0 ] = AvailRange.getLowerEndpoint ().getMinor ().hasValue () ?
@@ -691,9 +701,7 @@ static bool isApplicationExtensionSafe(const LangOptions &LangOpts) {
691
701
}
692
702
693
703
static bool hasLinkerDirective (Decl *D) {
694
- if (D->getAttrs ().hasAttribute <OriginallyDefinedInAttr>())
695
- return true ;
696
- return false ;
704
+ return getDeclMoveOSVersion (D).hasValue ();
697
705
}
698
706
699
707
static void enumeratePublicSymbolsAndWrite (ModuleDecl *M, FileUnit *singleFile,
0 commit comments