Skip to content

Commit 70ec903

Browse files
bwlodarczsys-ce-bb
authored andcommitted
Access out of scope fix in OCLToSPIRVBase::visitCallAtomicCmpXchg (#2264)
Pointer named Expected was taken by reference to closure to be executed later by Mutator. Mutator executes the closure in his destructor which happens after the destruction of Expected pointer stack frame. This fix clears some ASan errors from #2233. Original commit: KhronosGroup/SPIRV-LLVM-Translator@c7cd904
1 parent d409714 commit 70ec903

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

llvm-spirv/lib/SPIRV/OCLToSPIRV.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -485,11 +485,12 @@ CallInst *OCLToSPIRVBase::visitCallAtomicCmpXchg(CallInst *CI) {
485485
Mutator.mapArg(1, [=](IRBuilder<> &Builder, Value *V) {
486486
return Builder.CreateLoad(MemTy, V, "exp");
487487
});
488-
Mutator.changeReturnType(MemTy, [&](IRBuilder<> &Builder, CallInst *NCI) {
489-
NewCI = NCI;
490-
Builder.CreateStore(NCI, Expected);
491-
return Builder.CreateICmpEQ(NCI, NCI->getArgOperand(1));
492-
});
488+
Mutator.changeReturnType(
489+
MemTy, [Expected, &NewCI](IRBuilder<> &Builder, CallInst *NCI) {
490+
NewCI = NCI;
491+
Builder.CreateStore(NCI, Expected);
492+
return Builder.CreateICmpEQ(NCI, NCI->getArgOperand(1));
493+
});
493494
}
494495
return NewCI;
495496
}

0 commit comments

Comments
 (0)