Skip to content

Commit 9258102

Browse files
authored
Merge pull request #64162 from gottesmm/pr-ca138b56e9896ca836369feed78694f40d116df3
[move-only] Ban @objc enum being marked as move only.
2 parents 8b63ce8 + 9f5ceb0 commit 9258102

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6800,6 +6800,8 @@ ERROR(moveonly_cast,none,
68006800
"move-only types cannot be conditionally cast", ())
68016801
ERROR(moveonly_failable_init,none,
68026802
"move-only types cannot have failable initializers yet", ())
6803+
ERROR(moveonly_objc_enum_banned, none,
6804+
"@objc enums cannot be marked as move-only", ())
68036805

68046806
//------------------------------------------------------------------------------
68056807
// MARK: Type inference from default expressions

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2547,6 +2547,13 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
25472547
}
25482548
}
25492549

2550+
// -----
2551+
// NonCopyableChecks
2552+
//
2553+
2554+
if (ED->isObjC() && ED->isMoveOnly()) {
2555+
ED->diagnose(diag::moveonly_objc_enum_banned);
2556+
}
25502557
// FIXME(kavon): see if these can be integrated into other parts of Sema
25512558
diagnoseCopyableTypeContainingMoveOnlyType(ED);
25522559
diagnoseIncompatibleProtocolsForMoveOnlyType(ED);

test/Sema/moveonly_objc_enum.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-move-only
2+
3+
// REQUIRES: objc_interop
4+
5+
// Validate that we can't mark an objc enum as move only.
6+
7+
@_moveOnly
8+
@objc enum Foo : Int { // expected-error {{@objc enums cannot be marked as move-only}}
9+
case X, Y, Z
10+
deinit {} // objc enums cannot have deinits
11+
}
12+
13+
@_moveOnly
14+
@objc enum Foo2 : Int { // expected-error {{@objc enums cannot be marked as move-only}}
15+
case X, Y, Z
16+
}
17+

0 commit comments

Comments
 (0)