diff options
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index da8ee1f15bf8..d3b60c7add34 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -917,8 +917,7 @@ void ModuleSanitizerCoverage::InjectTraceForGep( void ModuleSanitizerCoverage::InjectTraceForLoadsAndStores( Function &, ArrayRef<LoadInst *> Loads, ArrayRef<StoreInst *> Stores) { - auto CallbackIdx = [&](const Value *Ptr) -> int { - auto ElementTy = cast<PointerType>(Ptr->getType())->getElementType(); + auto CallbackIdx = [&](Type *ElementTy) -> int { uint64_t TypeSize = DL->getTypeStoreSizeInBits(ElementTy); return TypeSize == 8 ? 0 : TypeSize == 16 ? 1 @@ -932,7 +931,7 @@ void ModuleSanitizerCoverage::InjectTraceForLoadsAndStores( for (auto LI : Loads) { IRBuilder<> IRB(LI); auto Ptr = LI->getPointerOperand(); - int Idx = CallbackIdx(Ptr); + int Idx = CallbackIdx(LI->getType()); if (Idx < 0) continue; IRB.CreateCall(SanCovLoadFunction[Idx], @@ -941,7 +940,7 @@ void ModuleSanitizerCoverage::InjectTraceForLoadsAndStores( for (auto SI : Stores) { IRBuilder<> IRB(SI); auto Ptr = SI->getPointerOperand(); - int Idx = CallbackIdx(Ptr); + int Idx = CallbackIdx(SI->getValueOperand()->getType()); if (Idx < 0) continue; IRB.CreateCall(SanCovStoreFunction[Idx], |
