Files
swift-mirror/test/ModuleInterface/empty-extension.swift
Alexis Laferrière fd78da5137 [ModuleInterface] Don't print extensions to implementation-only imported types
Extensions to implementation-only types are accepted at type-checking
only if they don't define any public members. However if they declared a
conformance to a public type they were also printed in the
swiftinterface, making it unparsable because of an unknown type.

Still accept such extensions but don't print them.

rdar://problem/67516588
2020-08-20 17:12:31 -07:00

50 lines
1.2 KiB
Swift

// Test that we don't print extensions to implementation-only imported types.
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module %s -DIOI_LIB -module-name IOILib -emit-module-path %t/IOILib.swiftmodule
// RUN: %target-swift-frontend -emit-module %s -DEXPORTED_LIB -module-name IndirectLib -emit-module-path %t/IndirectLib.swiftmodule -I %t
// RUN: %target-swift-frontend -emit-module %s -DLIB -module-name Lib -emit-module-path %t/Lib.swiftmodule -I %t
// RUN: %target-swift-frontend-typecheck -emit-module-interface-path %t/out.swiftinterface %s -I %t -swift-version 5 -enable-library-evolution
// RUN: %FileCheck %s < %t/out.swiftinterface
#if IOI_LIB
public struct IOIImportedType {
public func foo() {}
}
#elseif EXPORTED_LIB
public struct ExportedType {
public func foo() {}
}
#elseif LIB
@_exported import IndirectLib
public struct NormalImportedType {
public func foo() {}
}
#else // Client
import Lib
@_implementationOnly import IOILib
public protocol PublicProto {
func foo()
}
extension IOIImportedType : PublicProto {}
// CHECK-NOT: IOIImportedType
extension NormalImportedType : PublicProto {}
// CHECK: extension NormalImportedType
extension ExportedType : PublicProto {}
// CHECK: extension ExportedType
#endif