mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
When a type is renamed, we leave behind a "compatibility typealias" whose underlying type uses the new name. For generic types, though, we were using the generic parameters and environment of the original type, which is completely bogus. "Fix" this by just dropping the generic part entirely and making a typealias that refers to the /unbound/ generic type, as if written as `typealias OldName = NewName` instead of `typealias OldName<Element> = NewName<Element>`. The rest of the compiler can handle that fine.
47 lines
2.6 KiB
Swift
47 lines
2.6 KiB
Swift
// RUN: rm -rf %t && mkdir -p %t
|
|
|
|
// RUN: not %target-swift-frontend -typecheck -F %S/Inputs/custom-frameworks -swift-version 4 %s 2>&1 | %FileCheck -check-prefix=CHECK-DIAGS -check-prefix=CHECK-DIAGS-4 %s
|
|
// RUN: not %target-swift-frontend -typecheck -F %S/Inputs/custom-frameworks -swift-version 3 %s 2>&1 | %FileCheck -check-prefix=CHECK-DIAGS -check-prefix=CHECK-DIAGS-3 %s
|
|
|
|
// REQUIRES: objc_interop
|
|
|
|
import APINotesFrameworkTest
|
|
|
|
// CHECK-DIAGS-4-NOT: versioned-objc.swift:[[@LINE-1]]:
|
|
class ProtoWithVersionedUnavailableMemberImpl: ProtoWithVersionedUnavailableMember {
|
|
// CHECK-DIAGS-3: versioned-objc.swift:[[@LINE-1]]:7: error: type 'ProtoWithVersionedUnavailableMemberImpl' cannot conform to protocol 'ProtoWithVersionedUnavailableMember' because it has requirements that cannot be satisfied
|
|
func requirement() -> Any? { return nil }
|
|
}
|
|
|
|
func testNonGeneric() {
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: cannot convert value of type 'Any' to specified type 'Int'
|
|
let _: Int = NewlyGenericSub.defaultElement()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: generic parameter 'Element' could not be inferred
|
|
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: cannot specialize non-generic type 'NewlyGenericSub'
|
|
let _: Int = NewlyGenericSub<Base>.defaultElement()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: cannot convert value of type 'Base' to specified type 'Int'
|
|
}
|
|
|
|
func testRenamedGeneric() {
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: 'RenamedGeneric' has been renamed to 'OldRenamedGeneric'
|
|
let _: OldRenamedGeneric<Base> = RenamedGeneric<Base>()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: 'OldRenamedGeneric' has been renamed to 'RenamedGeneric'
|
|
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: 'RenamedGeneric' has been renamed to 'OldRenamedGeneric'
|
|
let _: RenamedGeneric<Base> = OldRenamedGeneric<Base>()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: 'OldRenamedGeneric' has been renamed to 'RenamedGeneric'
|
|
|
|
class SwiftClass {}
|
|
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: 'OldRenamedGeneric' requires that 'SwiftClass' inherit from 'Base'
|
|
let _: OldRenamedGeneric<SwiftClass> = RenamedGeneric<SwiftClass>()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: 'RenamedGeneric' requires that 'SwiftClass' inherit from 'Base'
|
|
|
|
// CHECK-DIAGS-3:[[@LINE+1]]:{{[0-9]+}}: error: 'OldRenamedGeneric' requires that 'SwiftClass' inherit from 'Base'
|
|
let _: RenamedGeneric<SwiftClass> = OldRenamedGeneric<SwiftClass>()
|
|
// CHECK-DIAGS-4:[[@LINE-1]]:{{[0-9]+}}: error: 'RenamedGeneric' requires that 'SwiftClass' inherit from 'Base'
|
|
}
|
|
|
|
let unrelatedDiagnostic: Int = nil
|