Skip to content

Commit 1c4442f

Browse files
committed
Allow @unsafe on enum case declarations
1 parent 268de01 commit 1c4442f

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

include/swift/AST/DeclAttr.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ SIMPLE_DECL_ATTR(sensitive, Sensitive,
505505

506506
SIMPLE_DECL_ATTR(unsafe, Unsafe,
507507
OnAbstractFunction | OnSubscript | OnVar | OnMacro | OnNominalType |
508-
OnExtension | OnTypeAlias | UserInaccessible |
508+
OnExtension | OnTypeAlias | OnEnumElement | UserInaccessible |
509509
ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove,
510510
160)
511511

test/Unsafe/unsafe.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ struct SuperHolder {
6161
// -----------------------------------------------------------------------
6262
// Inheritance of @unsafe
6363
// -----------------------------------------------------------------------
64-
@unsafe class UnsafeSuper { // expected-note 3{{'UnsafeSuper' declared here}}
64+
@unsafe class UnsafeSuper { // expected-note 5{{'UnsafeSuper' declared here}}
6565
func f() { } // expected-note{{unsafe instance method 'f' declared here}}
6666
};
6767

@@ -88,3 +88,16 @@ func testMe(
8888

8989
_ = getPointers() // expected-warning{{call to global function 'getPointers' involves unsafe type 'PointerType'}}
9090
}
91+
92+
// -----------------------------------------------------------------------
93+
// Various declaration kinds
94+
// -----------------------------------------------------------------------
95+
typealias SuperUnsafe = UnsafeSuper // expected-warning{{reference to unsafe class 'UnsafeSuper' [Unsafe]}}
96+
@unsafe typealias SuperUnsafe2 = UnsafeSuper
97+
98+
enum HasUnsafeThings {
99+
// expected-note@+1{{make enum case 'one' @unsafe to indicate that its use is not memory-safe}}
100+
case one(UnsafeSuper) // expected-warning{{reference to unsafe class 'UnsafeSuper' [Unsafe]}}
101+
102+
@unsafe case two(UnsafeSuper)
103+
}

0 commit comments

Comments
 (0)