@@ -39,13 +39,13 @@ static bool isUnsafeUseInDefinition(const UnsafeUse &use) {
39
39
case UnsafeUse::Witness:
40
40
case UnsafeUse::TypeWitness:
41
41
case UnsafeUse::UnsafeConformance:
42
- case UnsafeUse::UnownedUnsafe:
43
42
// Never part of the definition. These are always part of the interface.
44
43
return false ;
45
44
46
45
case UnsafeUse::ReferenceToUnsafe:
47
46
case UnsafeUse::CallToUnsafe:
48
47
case UnsafeUse::NonisolatedUnsafe:
48
+ case UnsafeUse::UnownedUnsafe:
49
49
return enclosingContextForUnsafe (use).second ;
50
50
}
51
51
}
@@ -100,7 +100,8 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
100
100
// same declaration.
101
101
if (use.getKind () == UnsafeUse::ReferenceToUnsafe ||
102
102
use.getKind () == UnsafeUse::CallToUnsafe ||
103
- use.getKind () == UnsafeUse::NonisolatedUnsafe) {
103
+ use.getKind () == UnsafeUse::NonisolatedUnsafe ||
104
+ use.getKind () == UnsafeUse::UnownedUnsafe) {
104
105
auto [enclosingDecl, _] = enclosingContextForUnsafe (
105
106
use.getLocation (), use.getDeclContext ());
106
107
if (enclosingDecl) {
@@ -164,9 +165,16 @@ void swift::diagnoseUnsafeUse(const UnsafeUse &use, bool asNote) {
164
165
165
166
case UnsafeUse::UnownedUnsafe: {
166
167
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
+ }
170
178
return ;
171
179
}
172
180
0 commit comments