mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Now that we apply the callback with the correct generic signature, the assert can go away. It was being triggered if the protocol extension was defined in a different resilience domain; otherwise we prefer direct access anyway. Note that materializeForSet now has to be able to re-abstract Self when invoking the callback, since we might have to go from a thin metatype to a thick metatype.
47 lines
1.5 KiB
Swift
47 lines
1.5 KiB
Swift
// RUN: rm -rf %t && mkdir %t
|
|
// RUN: %target-build-swift -emit-library -Xfrontend -enable-resilience -c %S/../Inputs/resilient_protocol.swift -o %t/resilient_protocol.o
|
|
// RUN: %target-build-swift -emit-module -Xfrontend -enable-resilience -c %S/../Inputs/resilient_protocol.swift -o %t/resilient_protocol.o
|
|
// RUN: %target-build-swift %s -Xlinker %t/resilient_protocol.o -I %t -L %t -o %t/main
|
|
// RUN: %target-run %t/main
|
|
// REQUIRES: executable_test
|
|
|
|
//
|
|
// Note: protocol resilience in the sense of resiliently adding new
|
|
// requirements with default implementations is actually tested in
|
|
// validation-test/Evolution/test_protocol_*.
|
|
//
|
|
// This test just ensures we can call materializeForSet defined in a
|
|
// protocol extension from a different resilience domain.
|
|
//
|
|
|
|
import StdlibUnittest
|
|
|
|
// Also import modules which are used by StdlibUnittest internally. This
|
|
// workaround is needed to link all required libraries in case we compile
|
|
// StdlibUnittest with -sil-serialize-all.
|
|
import SwiftPrivate
|
|
#if _runtime(_ObjC)
|
|
import ObjectiveC
|
|
#endif
|
|
|
|
import resilient_protocol
|
|
|
|
var ResilientProtocolTestSuite = TestSuite("ResilientProtocol")
|
|
|
|
func increment(x: inout Int, by: Int) {
|
|
x += by
|
|
}
|
|
|
|
struct OtherConformingType : OtherResilientProtocol { }
|
|
|
|
ResilientProtocolTestSuite.test("PropertyInProtocolExtension") {
|
|
var o = OtherConformingType()
|
|
|
|
increment(&o.propertyInExtension, by: 5)
|
|
increment(&OtherConformingType.staticPropertyInExtension, by: 7)
|
|
|
|
expectEqual(OtherConformingType.staticPropertyInExtension, 12)
|
|
}
|
|
|
|
runAllTests()
|