@@ -108,21 +108,17 @@ class DetectUninitializedPass
108108 {
109109 for (auto &inst : bb->getInstructions ()) {
110110 if (auto *store = llvm::dyn_cast<gil::StoreInst>(&inst)) {
111- gil::Value destPtr = store->getDest ();
112- state[destPtr] = MemoryState::Initialized;
111+ state[store->getDest ()] = MemoryState::Initialized;
113112 } else if (auto *alloca = llvm::dyn_cast<gil::AllocaInst>(&inst)) {
114- gil::Value allocatedPtr = alloca->getResult (0 );
115- state[allocatedPtr] = MemoryState::Uninitialized;
113+ state[alloca->getResult (0 )] = MemoryState::Uninitialized;
116114 } else if (auto *ptrOffsets
117115 = llvm::dyn_cast<gil::PtrOffsetInst>(&inst)) {
118- gil::Value basePtr = ptrOffsets->getBasePtr ();
119- MemoryState baseState = state.lookup (basePtr);
120- state[ptrOffsets->getResult (0 )] = baseState;
116+ state[ptrOffsets->getResult (0 )]
117+ = state.lookup (ptrOffsets->getBasePtr ());
121118 } else if (auto *structFieldPtr
122119 = llvm::dyn_cast<gil::StructFieldPtrInst>(&inst)) {
123- gil::Value basePtr = structFieldPtr->getStructPtr ();
124- MemoryState baseState = state.lookup (basePtr);
125- state[structFieldPtr->getResult (0 )] = baseState;
120+ state[structFieldPtr->getResult (0 )]
121+ = state.lookup (structFieldPtr->getStructPtr ());
126122 } else if (auto *bitcastInst
127123 = llvm::dyn_cast<gil::BitcastInst>(&inst)) {
128124 auto source = bitcastInst->getOperand ();
@@ -256,15 +252,13 @@ class DetectUninitializedPass
256252
257253 MemoryState prevState = currentState.lookup (destPtr);
258254
259- bool warnOnUncertainSet = (prevState == MemoryState::MaybeInitialized);
260-
261255 if (prevState == MemoryState::Uninitialized) {
262256 store->setOwnershipKind (gil::StoreOwnershipKind::Init);
263257 } else {
264258 store->setOwnershipKind (gil::StoreOwnershipKind::Set);
265259 }
266260
267- if (warnOnUncertainSet ) {
261+ if (prevState == MemoryState::MaybeInitialized ) {
268262 diagManager.error (
269263 store->getLocation (),
270264 " Store to memory location with uncertain initialization"
@@ -297,8 +291,7 @@ class DetectUninitializedPass
297291 );
298292 }
299293
300- gil::Value loadedValue = load->getResult (0 );
301- currentState[loadedValue] = state;
294+ currentState[load->getResult (0 )] = state;
302295
303296 if (load->getOwnershipKind () == gil::LoadOwnershipKind::Take) {
304297 currentState[srcPtr] = MemoryState::Uninitialized;
@@ -307,30 +300,21 @@ class DetectUninitializedPass
307300
308301 void visitAllocaInst (gil::AllocaInst *alloca)
309302 {
310- gil::Value allocatedPtr = alloca->getResult (0 );
311- currentState[allocatedPtr] = MemoryState::Uninitialized;
303+ currentState[alloca->getResult (0 )] = MemoryState::Uninitialized;
312304 }
313305
314306 void visitPtrOffsetInst (gil::PtrOffsetInst *inst)
315307 {
316- gil::Value basePtr = inst->getBasePtr ();
317- MemoryState baseState = getTrackedStateOrDefault (
318- basePtr, currentState, MemoryState::Uninitialized
308+ currentState[inst->getResult (0 )] = getTrackedStateOrDefault (
309+ inst->getBasePtr (), currentState, MemoryState::Uninitialized
319310 );
320-
321- gil::Value resultPtr = inst->getResult (0 );
322- currentState[resultPtr] = baseState;
323311 }
324312
325313 void visitStructFieldPtrInst (gil::StructFieldPtrInst *inst)
326314 {
327- gil::Value basePtr = inst->getStructPtr ();
328- MemoryState baseState = getTrackedStateOrDefault (
329- basePtr, currentState, MemoryState::Uninitialized
315+ currentState[inst->getResult (0 )] = getTrackedStateOrDefault (
316+ inst->getStructPtr (), currentState, MemoryState::Uninitialized
330317 );
331-
332- gil::Value resultPtr = inst->getResult (0 );
333- currentState[resultPtr] = baseState;
334318 }
335319
336320 void visitBitcastInst (gil::BitcastInst *inst)
@@ -352,8 +336,7 @@ class DetectUninitializedPass
352336
353337 void visitStructExtractInst (gil::StructExtractInst *inst)
354338 {
355- gil::Value fieldValue = inst->getResult (0 );
356- currentState[fieldValue] = MemoryState::Initialized;
339+ currentState[inst->getResult (0 )] = MemoryState::Initialized;
357340 }
358341
359342 void afterVisitFunction (gil::Function *func)
0 commit comments