@@ -39,13 +39,13 @@ static bool isUnsafeUseInDefinition(const UnsafeUse &use) {
3939 case UnsafeUse::Witness:
4040 case UnsafeUse::TypeWitness:
4141 case UnsafeUse::UnsafeConformance:
42- case UnsafeUse::UnownedUnsafe:
4342 // Never part of the definition. These are always part of the interface.
4443 return false ;
4544
4645 case UnsafeUse::ReferenceToUnsafe:
4746 case UnsafeUse::CallToUnsafe:
4847 case UnsafeUse::NonisolatedUnsafe:
48+ case UnsafeUse::UnownedUnsafe:
4949 return enclosingContextForUnsafe (use).second ;
5050 }
5151}
@@ -100,7 +100,8 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
100100 // same declaration.
101101 if (use.getKind () == UnsafeUse::ReferenceToUnsafe ||
102102 use.getKind () == UnsafeUse::CallToUnsafe ||
103- use.getKind () == UnsafeUse::NonisolatedUnsafe) {
103+ use.getKind () == UnsafeUse::NonisolatedUnsafe ||
104+ use.getKind () == UnsafeUse::UnownedUnsafe) {
104105 auto [enclosingDecl, _] = enclosingContextForUnsafe (
105106 use.getLocation (), use.getDeclContext ());
106107 if (enclosingDecl) {
@@ -164,9 +165,16 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
164165
165166 case UnsafeUse::UnownedUnsafe: {
166167 auto var = cast<VarDecl>(use.getDecl ());
167- var->diagnose (diag::unowned_unsafe_is_unsafe);
168- var->diagnose (diag::make_enclosing_context_unsafe, var)
169- .fixItInsert (var->getAttributeInsertionLoc (false ), " @unsafe " );
168+ ASTContext &ctx = var->getASTContext ();
169+ ctx.Diags .diagnose (
170+ use.getLocation (),
171+ asNote ? diag::note_reference_unowned_unsafe
172+ : diag::reference_unowned_unsafe,
173+ var);
174+ if (!asNote) {
175+ var->diagnose (diag::make_enclosing_context_unsafe, var)
176+ .fixItInsert (var->getAttributeInsertionLoc (false ), " @unsafe " );
177+ }
170178 return ;
171179 }
172180
0 commit comments