@@ -88,9 +88,13 @@ static void suggestUnsafeMarkerOnConformance(
88
88
}
89
89
90
90
// / Retrieve the extra information
91
- static SourceFileExtras & getSourceFileExtrasFor (const Decl *decl) {
91
+ static SourceFileExtras * getSourceFileExtrasFor (const Decl *decl) {
92
92
auto dc = decl->getDeclContext ();
93
- return dc->getOutermostParentSourceFile ()->getExtras ();
93
+ auto sf = dc->getOutermostParentSourceFile ();
94
+ if (!sf)
95
+ return nullptr ;
96
+
97
+ return &sf->getExtras ();
94
98
}
95
99
96
100
void swift::diagnoseUnsafeUse (const UnsafeUse &use, bool asNote) {
@@ -105,8 +109,9 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
105
109
auto [enclosingDecl, _] = enclosingContextForUnsafe (
106
110
use.getLocation (), use.getDeclContext ());
107
111
if (enclosingDecl) {
108
- getSourceFileExtrasFor (enclosingDecl).unsafeUses [enclosingDecl]
109
- .push_back (use);
112
+ if (auto extras = getSourceFileExtrasFor (enclosingDecl)) {
113
+ extras->unsafeUses [enclosingDecl].push_back (use);
114
+ }
110
115
return ;
111
116
}
112
117
}
@@ -232,14 +237,17 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
232
237
}
233
238
234
239
void swift::diagnoseUnsafeUsesIn (const Decl *decl) {
235
- auto &extras = getSourceFileExtrasFor (decl);
236
- auto known = extras.unsafeUses .find (decl);
237
- if (known == extras.unsafeUses .end ())
240
+ auto *extras = getSourceFileExtrasFor (decl);
241
+ if (!extras)
242
+ return ;
243
+
244
+ auto known = extras->unsafeUses .find (decl);
245
+ if (known == extras->unsafeUses .end ())
238
246
return ;
239
247
240
248
// Take the unsafe uses.
241
249
auto unsafeUses = std::move (known->second );
242
- extras. unsafeUses .erase (known);
250
+ extras-> unsafeUses .erase (known);
243
251
if (unsafeUses.empty ())
244
252
return ;
245
253
0 commit comments