mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The @_versioned accessibility check is done against the formal access. But the diagnostics is printed with getAccessForDiagnostics. In cases where the effective access is internal, the diagnostics will crash. Example:
```
class A { // implicitly internal
@_versioned public var a: Int = 0 // explicity public
}
```
47 lines
1.5 KiB
Swift
47 lines
1.5 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
@_versioned private func privateVersioned() {}
|
|
// expected-error@-1 {{'@_versioned' attribute can only be applied to internal declarations, but 'privateVersioned' is private}}
|
|
|
|
@_versioned fileprivate func fileprivateVersioned() {}
|
|
// expected-error@-1 {{'@_versioned' attribute can only be applied to internal declarations, but 'fileprivateVersioned' is fileprivate}}
|
|
|
|
@_versioned internal func internalVersioned() {}
|
|
// OK
|
|
|
|
@_versioned func implicitInternalVersioned() {}
|
|
// OK
|
|
|
|
@_versioned public func publicVersioned() {}
|
|
// expected-error@-1 {{'@_versioned' attribute can only be applied to internal declarations, but 'publicVersioned' is public}}
|
|
|
|
internal class internalClass {
|
|
@_versioned public func publicVersioned() {}
|
|
// expected-error@-1 {{'@_versioned' attribute can only be applied to internal declarations, but 'publicVersioned' is public}}
|
|
}
|
|
|
|
fileprivate class filePrivateClass {
|
|
@_versioned internal func internalVersioned() {}
|
|
}
|
|
|
|
@_versioned struct S {
|
|
var x: Int
|
|
@_versioned var y: Int
|
|
}
|
|
|
|
@_versioned extension S {}
|
|
// expected-error@-1 {{@_versioned cannot be applied to this declaration}}
|
|
|
|
@_versioned
|
|
protocol VersionedProtocol {
|
|
associatedtype T
|
|
|
|
func requirement() -> T
|
|
|
|
public func publicRequirement() -> T
|
|
// expected-error@-1 {{'public' modifier cannot be used in protocols}}
|
|
|
|
@_versioned func versionedRequirement() -> T
|
|
// expected-error@-1 {{'@_versioned' attribute cannot be used in protocols}}
|
|
}
|