1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
// RUN: %empty-directory(%t)
// RUN: split-file %s %t
// RUN: %target-swift-frontend \
// RUN: %t/Library.swift \
// RUN: -emit-module \
// RUN: -enable-library-evolution \
// RUN: -module-name Library \
// RUN: -emit-module-path %t/Library.swiftmodule
// RUN: %target-swift-frontend \
// RUN: %t/Client.swift \
// RUN: -emit-sil -verify \
// RUN: -debug-diagnostic-names \
// RUN: -sil-verify-all \
// RUN: -I %t
//--- Library.swift
public struct Ur : ~Copyable {
deinit {}
}
public func consume(_ ur: consuming Ur) {}
public func borrow(_ ur: borrowing Ur) {}
@frozen
public struct AggFrozen : ~Copyable {
public var field1: Ur
public var field2: Ur
}
public func consume(_ a: consuming AggFrozen) {}
public func borrow(_ ur: borrowing AggFrozen) {}
@frozen
public struct AggFrozenDeiniting : ~Copyable {
public var field1: Ur
public var field2: Ur
deinit {}
}
public func consume(_ a: consuming AggFrozenDeiniting) {}
public func borrow(_ ur: borrowing AggFrozenDeiniting) {}
public struct AggResilient : ~Copyable {
public var field1: Ur
public var field2: Ur
}
public func consume(_ a: consuming AggResilient) {}
public func borrow(_ ur: borrowing AggResilient) {}
public struct AggResilientDeiniting : ~Copyable {
public var field1: Ur
public var field2: Ur
deinit {}
}
public func consume(_ a: consuming AggResilientDeiniting) {}
public func borrow(_ ur: borrowing AggResilientDeiniting) {}
//--- Client.swift
import Library
struct AggLocalDeiniting : ~Copyable {
var field1: Ur
var field2: Ur
deinit {}
}
struct AggLocal : ~Copyable {
var field1: Ur
var field2: Ur
}
func consumeField1_AggFrozen(_ a: consuming AggFrozen) {
consume(a.field1)
}
func consumeField1_AggFrozenDeiniting(_ a: consuming AggFrozenDeiniting) {
consume(a.field1) // expected-error{{cannot partially consume 'a' when it has a deinitializer}}
}
func consumeField1_AggResilient(_ a: consuming AggResilient) {
consume(a.field1) // expected-error{{field 'a.field1' was consumed but not reinitialized; the field must be reinitialized during the access}}
// expected-note@-1{{consumed here}}
}
func consumeField1_AggResilientDeiniting(_ a: consuming AggResilientDeiniting) {
consume(a.field1) // expected-error{{field 'a.field1' was consumed but not reinitialized; the field must be reinitialized during the access}}
// expected-note@-1{{consumed here}}
}
|