@@ -120,8 +120,13 @@ class StoredPropertyProjector : public ComponentProjector {
120
120
} else {
121
121
// Accessing a class member -> reading the class
122
122
parent->project (AccessType::Get, [&](SILValue parentValue) {
123
- SingleValueInstruction *Ref = builder.createLoad (loc, parentValue,
124
- LoadOwnershipQualifier::Unqualified);
123
+ SingleValueInstruction *Borrow = nullptr ;
124
+ SingleValueInstruction *Ref;
125
+ if (builder.hasOwnership ()) {
126
+ Ref = Borrow = builder.createLoadBorrow (loc, parentValue);
127
+ } else {
128
+ Ref = builder.createLoad (loc, parentValue, LoadOwnershipQualifier::Unqualified);
129
+ }
125
130
126
131
// If we were previously accessing a class member, we're done now.
127
132
insertEndAccess (beginAccess, builder);
@@ -135,6 +140,9 @@ class StoredPropertyProjector : public ComponentProjector {
135
140
// decl or in a superclass of it. Just handle this to be on the safe
136
141
// side.
137
142
callback (SILValue ());
143
+ if (Borrow) {
144
+ builder.createEndBorrow (loc, Borrow);
145
+ }
138
146
return ;
139
147
}
140
148
Ref = builder.createUpcast (loc, Ref, superCl);
@@ -163,6 +171,10 @@ class StoredPropertyProjector : public ComponentProjector {
163
171
if (beginAccess == addr) {
164
172
insertEndAccess (beginAccess, builder);
165
173
}
174
+
175
+ if (Borrow) {
176
+ builder.createEndBorrow (loc, Borrow);
177
+ }
166
178
});
167
179
}
168
180
}
0 commit comments