Skip to content

Commit 5bffd70

Browse files
committed
Sema: Accept @_implementationOnly on enums and classes
1 parent b52781e commit 5bffd70

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

include/swift/AST/DeclAttr.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ SIMPLE_DECL_ATTR(_alwaysEmitIntoClient, AlwaysEmitIntoClient,
474474
83)
475475

476476
SIMPLE_DECL_ATTR(_implementationOnly, ImplementationOnly,
477-
OnImport | OnFunc | OnConstructor | OnVar | OnSubscript | OnStruct,
477+
OnImport | OnFunc | OnConstructor | OnVar | OnSubscript | OnStruct | OnClass | OnEnum,
478478
UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
479479
84)
480480

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3949,8 +3949,8 @@ ERROR(implementation_only_override_import_without_attr,none,
39493949
"override of %kindonly0 imported as implementation-only must be declared "
39503950
"'@_implementationOnly'",
39513951
(const ValueDecl *))
3952-
ERROR(implementation_only_on_structs_feature,none,
3953-
"'@_implementationOnly' on structs requires "
3952+
ERROR(implementation_only_on_types_feature,none,
3953+
"'@_implementationOnly' on a type requires "
39543954
"'-enable-experimental-feature CheckImplementationOnly'", ())
39553955

39563956
ERROR(import_attr_conflict,none,

lib/Sema/TypeCheckAttr.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4995,12 +4995,12 @@ AttributeChecker::visitImplementationOnlyAttr(ImplementationOnlyAttr *attr) {
49954995
return;
49964996
}
49974997

4998-
// @_implementationOnly on structs only applies to non-public types.
49994998
auto *VD = cast<ValueDecl>(D);
5000-
if (isa<StructDecl>(VD)) {
4999+
5000+
// @_implementationOnly on types only applies to non-public types.
5001+
if (isa<NominalTypeDecl>(D)) {
50015002
if (!Ctx.LangOpts.hasFeature(Feature::CheckImplementationOnly)) {
5002-
diagnoseAndRemoveAttr(attr,
5003-
diag::implementation_only_on_structs_feature);
5003+
diagnoseAndRemoveAttr(attr, diag::implementation_only_on_types_feature);
50045004
return;
50055005
}
50065006

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: %target-typecheck-verify-swift %s
2+
3+
@_implementationOnly struct MyStruct {}
4+
// expected-error@-1{{'@_implementationOnly' on a type requires '-enable-experimental-feature CheckImplementationOnly'}}

0 commit comments

Comments
 (0)