Files
swift-mirror/test/attr/attr_versioned.swift
David Hart ba13a894c0 Fixed crasher 28707
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
}
```
2017-03-15 07:38:53 +01:00

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}}
}