Files
swift-mirror/test/Interpreter/protocol_resilience.swift
Slava Pestov cfebe49e90 SILGen: Allow direct calls to materializeForSet defined in a protocol extension
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.
2016-03-14 13:01:03 -07:00

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()