// RUN: %target-swift-emit-ir %s -DIGNORE_FAILS -enable-experimental-feature Embedded -wmo -o /dev/null // RUN: %target-swift-emit-ir %s -enable-experimental-feature Embedded -wmo -verify // REQUIRES: swift_feature_Embedded struct MyStruct : ~Copyable { var member = "42" init() {} deinit {} mutating func foo() {} } var escape: (()->())? #if !IGNORE_FAILS public func test() { var s = MyStruct() // expected-error {{capturing generic non-copyable type with deinit in escaping closure not supported in embedded Swift}} s.foo() escape = { s.foo() } } // struct Outer: ~Copyable { var inner: MyStruct } public func testNested() { var s = Outer(inner: MyStruct()) // expected-error {{capturing generic non-copyable type with deinit in escaping closure not supported in embedded Swift}} s.inner.foo() escape = { s.inner.foo() } } // enum E: ~Copyable { case A(MyStruct) case B mutating func foo() {} } public func testEnum() { var s = E.A(MyStruct()) // expected-error {{capturing generic non-copyable type with deinit in escaping closure not supported in embedded Swift}} s.foo() escape = { s.foo() } } #endif // struct StructWithoutDeinit { var member = "42" init() {} mutating func foo() {} } public func testWithoutDeinit() { var s = StructWithoutDeinit() s.foo() escape = { s.foo() } } // struct NonCopyableStructWithoutDeinit: ~Copyable { var member = "42" init() {} mutating func foo() {} } public func testNonCopyableWithoutDeinit() { var s = NonCopyableStructWithoutDeinit() s.foo() escape = { s.foo() } } // struct NonGenericStruct : ~Copyable { var member = "42" init() { } deinit { } mutating func foo() { } } public func testNonGeneric() { var s = NonGenericStruct() s.foo() escape = { s.foo() } }