@@ -69,6 +69,7 @@ struct LocalVariableAccess: CustomStringConvertible {
69
69
case dependenceSource // A value/address depends on this local here (like a load)
70
70
case dependenceDest // This local depends on another value/address here (like a store)
71
71
case store // 'var' initialization and destruction
72
+ case storeBorrow // scoped initialization of temporaries
72
73
case apply // indirect arguments
73
74
case escape // alloc_box captures
74
75
}
@@ -103,7 +104,7 @@ struct LocalVariableAccess: CustomStringConvertible {
103
104
}
104
105
case . load, . dependenceSource, . dependenceDest:
105
106
return false
106
- case . incomingArgument, . outgoingArgument, . store, . inoutYield:
107
+ case . incomingArgument, . outgoingArgument, . store, . storeBorrow , . inoutYield:
107
108
return true
108
109
case . apply:
109
110
let apply = instruction as! FullApplySite
@@ -146,6 +147,8 @@ struct LocalVariableAccess: CustomStringConvertible {
146
147
str += " dependenceDest "
147
148
case . store:
148
149
str += " store "
150
+ case . storeBorrow:
151
+ str += " storeBorrow "
149
152
case . apply:
150
153
str += " apply "
151
154
case . escape:
@@ -178,9 +181,9 @@ class LocalVariableAccessInfo: CustomStringConvertible {
178
181
case . `init`, . modify:
179
182
break // lazily compute full assignment
180
183
}
181
- case . load, . dependenceSource, . dependenceDest:
184
+ case . load, . dependenceSource, . dependenceDest:
182
185
self . _isFullyAssigned = false
183
- case . store:
186
+ case . store, . storeBorrow :
184
187
if let store = localAccess. instruction as? StoringInstruction {
185
188
self . _isFullyAssigned = LocalVariableAccessInfo . isBase ( address: store. destination)
186
189
} else {
@@ -442,6 +445,9 @@ extension LocalVariableAccessWalker: AddressUseVisitor {
442
445
case is LoadBorrowInst :
443
446
visit ( LocalVariableAccess ( . load, operand) )
444
447
return . continueWalk
448
+ case is StoreBorrowInst :
449
+ visit ( LocalVariableAccess ( . storeBorrow, operand) )
450
+ return . continueWalk
445
451
default :
446
452
// A StoreBorrow should be guarded by an access scope.
447
453
//
0 commit comments