@@ -88,9 +88,13 @@ static void suggestUnsafeMarkerOnConformance(
8888}
8989
9090// / Retrieve the extra information
91- static SourceFileExtras & getSourceFileExtrasFor (const Decl *decl) {
91+ static SourceFileExtras * getSourceFileExtrasFor (const Decl *decl) {
9292 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 ();
9498}
9599
96100void swift::diagnoseUnsafeUse (const UnsafeUse &use, bool asNote) {
@@ -105,8 +109,9 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
105109 auto [enclosingDecl, _] = enclosingContextForUnsafe (
106110 use.getLocation (), use.getDeclContext ());
107111 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+ }
110115 return ;
111116 }
112117 }
@@ -232,14 +237,17 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
232237}
233238
234239void 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 ())
238246 return ;
239247
240248 // Take the unsafe uses.
241249 auto unsafeUses = std::move (known->second );
242- extras. unsafeUses .erase (known);
250+ extras-> unsafeUses .erase (known);
243251 if (unsafeUses.empty ())
244252 return ;
245253
0 commit comments