Skip to content

Commit 8dd7669

Browse files
Merge pull request #78592 from AnthonyLatsis/meganeura-monyi
Sema: Specify compatibility margin for `access_control_non_objc_open_member`
2 parents 9f1d727 + 6a0834f commit 8dd7669

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2178,9 +2178,10 @@ ERROR(access_control_extension_open,none,
21782178
ERROR(access_control_open_bad_decl,none,
21792179
"only classes and overridable class members can be declared 'open';"
21802180
" use 'public'", ())
2181-
WARNING(access_control_non_objc_open_member,none,
2182-
"non-'@objc' %0 in extensions cannot be overridden; use 'public' instead",
2183-
(DescriptiveDeclKind))
2181+
ERROR(access_control_non_objc_open_member,none,
2182+
"non-'@objc' %kindonly0 declared in extension cannot be overridden; use "
2183+
"'public' instead",
2184+
(const ValueDecl *))
21842185
ERROR(access_control_requires_package_name, none,
21852186
"the package access level %select{|used on %1 }0"
21862187
"requires a package name; set it with the compiler flag -package-name",

lib/Sema/TypeCheckAttr.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,9 +1326,9 @@ void AttributeChecker::visitAccessControlAttr(AccessControlAttr *attr) {
13261326
// an extension.
13271327
if (!VD->isObjC() && attr->getAccess() == AccessLevel::Open) {
13281328
diagnose(attr->getLocation(),
1329-
diag::access_control_non_objc_open_member,
1330-
VD->getDescriptiveKind())
1331-
.fixItReplace(attr->getRange(), "public");
1329+
diag::access_control_non_objc_open_member, VD)
1330+
.fixItReplace(attr->getRange(), "public")
1331+
.warnUntilSwiftVersion(7);
13321332
}
13331333
}
13341334
}

test/attr/open_objc.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ open class InvalidOpenExtension {
99
open var openVar: Int { 3 } // No warning: Pure Swift properties can be open inside the class declaration.
1010
}
1111
extension InvalidOpenExtension {
12-
open func nonObjcOpenMethod() { } // expected-warning {{non-'@objc' instance method in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
13-
open class func nonObjcOpenMethod() { } // expected-warning {{non-'@objc' class method in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
14-
open var nonObjcOpenVar: Int { 3 } // expected-warning {{non-'@objc' property in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
15-
open subscript(_ index: Int) -> Int { 3 } // expected-warning {{non-'@objc' subscript in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
16-
open convenience init(index: Int) { self.init() } // expected-error {{only classes and overridable class members can be declared 'open'; use 'public'}} // expected-warning {{non-'@objc' initializer in extensions cannot be overridden; use 'public' instead}}
12+
open func nonObjcOpenMethod() { } // expected-warning {{non-'@objc' instance method declared in extension cannot be overridden; use 'public' instead; this will be an error in a future Swift language mode}} {{3-7=public}}
13+
open class func nonObjcOpenMethod() { } // expected-warning {{non-'@objc' class method declared in extension cannot be overridden; use 'public' instead; this will be an error in a future Swift language mode}} {{3-7=public}}
14+
open var nonObjcOpenVar: Int { 3 } // expected-warning {{non-'@objc' property declared in extension cannot be overridden; use 'public' instead; this will be an error in a future Swift language mode}} {{3-7=public}}
15+
open subscript(_ index: Int) -> Int { 3 } // expected-warning {{non-'@objc' subscript declared in extension cannot be overridden; use 'public' instead; this will be an error in a future Swift language mode}} {{3-7=public}}
16+
open convenience init(index: Int) { self.init() } // expected-error {{only classes and overridable class members can be declared 'open'; use 'public'}} // expected-warning {{non-'@objc' initializer declared in extension cannot be overridden; use 'public' instead; this will be an error in a future Swift language mode}}
1717

1818
@objc open func objcOpenMethod() { } // No warning: @objc methods can be open inside extensions.
1919
@objc open var objcOpenVar: Int { 3 } // No warning: @objc methods can be open inside extensions.

0 commit comments

Comments
 (0)