| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: %target-swift-frontend -emit-module-path %t/availability_overloads_other.swiftmodule -emit-module -primary-file %S/Inputs/availability_overloads_other.swift |
| |
| // RUN: %target-swift-frontend -swift-version 3 -I %t -emit-silgen -primary-file %s |
| // RUN: %target-swift-frontend -swift-version 3 -I %t -emit-silgen -emit-ir %s |
| |
| // RUN: %target-swift-frontend -swift-version 4 -I %t -emit-silgen -primary-file %s |
| // RUN: %target-swift-frontend -swift-version 4 -I %t -emit-silgen -emit-ir %s |
| |
| // RUN: %target-swift-frontend -swift-version 3 -I %t -emit-module -emit-module-path /dev/null -primary-file %s |
| // RUN: %target-swift-frontend -swift-version 4 -I %t -emit-module -emit-module-path /dev/null -primary-file %s |
| |
| // This is a "don't crash with duplicate definition errors" test. |
| // We care about being able to express each of these "redeclarations" when the |
| // availability doesn't overlap. |
| |
| import availability_overloads_other |
| |
| // FIXME: What about method overrides and protocol witnesses? |
| |
| public class BeforeAndAfter { |
| @available(swift, obsoleted: 4.0) |
| public init(foo: ()) {} |
| |
| @available(swift 4.0) |
| public init?(foo: ()) {} |
| |
| @available(swift, obsoleted: 4.0) |
| public init() {} |
| |
| @available(swift 4.0) |
| public init() throws {} |
| |
| @available(swift, obsoleted: 4.0) |
| public static func foo() {} |
| |
| @available(swift 4.0) |
| public static func foo() throws {} |
| |
| @available(swift 4.0) |
| public var computed: Int16 { get { return 0 } set { } } |
| |
| @available(swift, obsoleted: 4.0) |
| public var computed: Int8 { get { return 0 } set { } } |
| |
| @available(swift 4.0) |
| public static var computed: Int16 { get { return 0 } set { } } |
| |
| @available(swift, obsoleted: 4.0) |
| public static var computed: Int8 { get { return 0 } set { } } |
| } |
| |
| |
| // Make sure we can generate calls to these overloads, too |
| _ = BeforeAndAfter(foo: ()) |
| _ = try BeforeAndAfter() |
| _ = try BeforeAndAfter.foo() |
| _ = BeforeAndAfter.computed |
| BeforeAndAfter.computed = 10 |
| _ = try BeforeAndAfter().computed |
| try BeforeAndAfter().computed = 10 |
| |
| // Same thing but in a different module |
| _ = BeforeAndAfterOther(foo: ()) |
| _ = try BeforeAndAfterOther() |
| _ = try BeforeAndAfterOther.foo() |
| _ = BeforeAndAfterOther.computed |
| BeforeAndAfterOther.computed = 10 |
| _ = try BeforeAndAfterOther().computed |
| try BeforeAndAfterOther().computed = 10 |