mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 03:58:16 +00:00
Instrumentation: Remove ilist iterator implicit conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250186 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ad48b01437
commit
210a154346
@ -1124,7 +1124,8 @@ void AddressSanitizer::instrumentUnusualSizeOrAlignment(
|
||||
void AddressSanitizerModule::poisonOneInitializer(Function &GlobalInit,
|
||||
GlobalValue *ModuleName) {
|
||||
// Set up the arguments to our poison/unpoison functions.
|
||||
IRBuilder<> IRB(GlobalInit.begin()->getFirstInsertionPt());
|
||||
IRBuilder<> IRB(&GlobalInit.front(),
|
||||
GlobalInit.front().getFirstInsertionPt());
|
||||
|
||||
// Add a call to poison all external globals before the given function starts.
|
||||
Value *ModuleNameAddr = ConstantExpr::getPointerCast(ModuleName, IntptrTy);
|
||||
@ -1514,7 +1515,7 @@ bool AddressSanitizer::maybeInsertAsanInitAtFunctionEntry(Function &F) {
|
||||
// We cannot just ignore these methods, because they may call other
|
||||
// instrumented functions.
|
||||
if (F.getName().find(" load]") != std::string::npos) {
|
||||
IRBuilder<> IRB(F.begin()->begin());
|
||||
IRBuilder<> IRB(&F.front(), F.front().begin());
|
||||
IRB.CreateCall(AsanInitFunction, {});
|
||||
return true;
|
||||
}
|
||||
@ -1821,8 +1822,8 @@ void FunctionStackPoisoner::poisonStack() {
|
||||
// regular stack slots.
|
||||
auto InsBeforeB = InsBefore->getParent();
|
||||
assert(InsBeforeB == &F.getEntryBlock());
|
||||
for (BasicBlock::iterator I = InsBefore; I != InsBeforeB->end(); ++I)
|
||||
if (auto *AI = dyn_cast_or_null<AllocaInst>(I))
|
||||
for (BasicBlock::iterator I(InsBefore); I != InsBeforeB->end(); ++I)
|
||||
if (auto *AI = dyn_cast<AllocaInst>(I))
|
||||
if (NonInstrumentedStaticAllocaVec.count(AI) > 0)
|
||||
AI->moveBefore(InsBefore);
|
||||
|
||||
|
@ -106,7 +106,7 @@ void BoundsChecking::emitBranchToTrap(Value *Cmp) {
|
||||
}
|
||||
++ChecksAdded;
|
||||
|
||||
Instruction *Inst = Builder->GetInsertPoint();
|
||||
BasicBlock::iterator Inst = Builder->GetInsertPoint();
|
||||
BasicBlock *OldBB = Inst->getParent();
|
||||
BasicBlock *Cont = OldBB->splitBasicBlock(Inst);
|
||||
OldBB->getTerminator()->eraseFromParent();
|
||||
|
@ -596,7 +596,7 @@ Constant *DataFlowSanitizer::getOrBuildTrampolineFunction(FunctionType *FT,
|
||||
DFSanFunction DFSF(*this, F, /*IsNativeABI=*/true);
|
||||
Function::arg_iterator ValAI = F->arg_begin(), ShadowAI = AI; ++ValAI;
|
||||
for (unsigned N = FT->getNumParams(); N != 0; ++ValAI, ++ShadowAI, --N)
|
||||
DFSF.ValShadowMap[ValAI] = ShadowAI;
|
||||
DFSF.ValShadowMap[&*ValAI] = &*ShadowAI;
|
||||
DFSanVisitor(DFSF).visitCallInst(*CI);
|
||||
if (!FT->getReturnType()->isVoidTy())
|
||||
new StoreInst(DFSF.getShadow(RI->getReturnValue()),
|
||||
@ -661,16 +661,16 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
|
||||
std::vector<Function *> FnsToInstrument;
|
||||
llvm::SmallPtrSet<Function *, 2> FnsWithNativeABI;
|
||||
for (Module::iterator i = M.begin(), e = M.end(); i != e; ++i) {
|
||||
if (!i->isIntrinsic() &&
|
||||
i != DFSanUnionFn &&
|
||||
i != DFSanCheckedUnionFn &&
|
||||
i != DFSanUnionLoadFn &&
|
||||
i != DFSanUnimplementedFn &&
|
||||
i != DFSanSetLabelFn &&
|
||||
i != DFSanNonzeroLabelFn &&
|
||||
i != DFSanVarargWrapperFn)
|
||||
FnsToInstrument.push_back(&*i);
|
||||
for (Function &i : M) {
|
||||
if (!i.isIntrinsic() &&
|
||||
&i != DFSanUnionFn &&
|
||||
&i != DFSanCheckedUnionFn &&
|
||||
&i != DFSanUnionLoadFn &&
|
||||
&i != DFSanUnimplementedFn &&
|
||||
&i != DFSanSetLabelFn &&
|
||||
&i != DFSanNonzeroLabelFn &&
|
||||
&i != DFSanVarargWrapperFn)
|
||||
FnsToInstrument.push_back(&i);
|
||||
}
|
||||
|
||||
// Give function aliases prefixes when necessary, and build wrappers where the
|
||||
@ -728,7 +728,7 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
NewFArg = NewF->arg_begin(),
|
||||
FArgEnd = F.arg_end();
|
||||
FArg != FArgEnd; ++FArg, ++NewFArg) {
|
||||
FArg->replaceAllUsesWith(NewFArg);
|
||||
FArg->replaceAllUsesWith(&*NewFArg);
|
||||
}
|
||||
NewF->getBasicBlockList().splice(NewF->begin(), F.getBasicBlockList());
|
||||
|
||||
@ -860,7 +860,7 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
if (Instruction *I = dyn_cast<Instruction>(V))
|
||||
Pos = I->getNextNode();
|
||||
else
|
||||
Pos = DFSF.F->getEntryBlock().begin();
|
||||
Pos = &DFSF.F->getEntryBlock().front();
|
||||
while (isa<PHINode>(Pos) || isa<AllocaInst>(Pos))
|
||||
Pos = Pos->getNextNode();
|
||||
IRBuilder<> IRB(Pos);
|
||||
@ -882,7 +882,7 @@ Value *DFSanFunction::getArgTLSPtr() {
|
||||
if (DFS.ArgTLS)
|
||||
return ArgTLSPtr = DFS.ArgTLS;
|
||||
|
||||
IRBuilder<> IRB(F->getEntryBlock().begin());
|
||||
IRBuilder<> IRB(&F->getEntryBlock().front());
|
||||
return ArgTLSPtr = IRB.CreateCall(DFS.GetArgTLS, {});
|
||||
}
|
||||
|
||||
@ -892,7 +892,7 @@ Value *DFSanFunction::getRetvalTLS() {
|
||||
if (DFS.RetvalTLS)
|
||||
return RetvalTLSPtr = DFS.RetvalTLS;
|
||||
|
||||
IRBuilder<> IRB(F->getEntryBlock().begin());
|
||||
IRBuilder<> IRB(&F->getEntryBlock().front());
|
||||
return RetvalTLSPtr = IRB.CreateCall(DFS.GetRetvalTLS, {});
|
||||
}
|
||||
|
||||
@ -924,7 +924,7 @@ Value *DFSanFunction::getShadow(Value *V) {
|
||||
Function::arg_iterator i = F->arg_begin();
|
||||
while (ArgIdx--)
|
||||
++i;
|
||||
Shadow = i;
|
||||
Shadow = &*i;
|
||||
assert(Shadow->getType() == DFS.ShadowTy);
|
||||
break;
|
||||
}
|
||||
@ -1009,7 +1009,7 @@ Value *DFSanFunction::combineShadows(Value *V1, Value *V2, Instruction *Pos) {
|
||||
Call->addAttribute(2, Attribute::ZExt);
|
||||
|
||||
BasicBlock *Tail = BI->getSuccessor(0);
|
||||
PHINode *Phi = PHINode::Create(DFS.ShadowTy, 2, "", Tail->begin());
|
||||
PHINode *Phi = PHINode::Create(DFS.ShadowTy, 2, "", &Tail->front());
|
||||
Phi->addIncoming(Call, Call->getParent());
|
||||
Phi->addIncoming(V1, Head);
|
||||
|
||||
@ -1123,7 +1123,7 @@ Value *DFSanFunction::loadShadow(Value *Addr, uint64_t Size, uint64_t Align,
|
||||
Value *ShadowsEq = IRB.CreateICmpEQ(WideShadow, RotShadow);
|
||||
|
||||
BasicBlock *Head = Pos->getParent();
|
||||
BasicBlock *Tail = Head->splitBasicBlock(Pos);
|
||||
BasicBlock *Tail = Head->splitBasicBlock(Pos->getIterator());
|
||||
|
||||
if (DomTreeNode *OldNode = DT.getNode(Head)) {
|
||||
std::vector<DomTreeNode *> Children(OldNode->begin(), OldNode->end());
|
||||
@ -1493,8 +1493,8 @@ void DFSanVisitor::visitCallSite(CallSite CS) {
|
||||
if (FT->isVarArg()) {
|
||||
auto *LabelVATy = ArrayType::get(DFSF.DFS.ShadowTy,
|
||||
CS.arg_size() - FT->getNumParams());
|
||||
auto *LabelVAAlloca = new AllocaInst(LabelVATy, "labelva",
|
||||
DFSF.F->getEntryBlock().begin());
|
||||
auto *LabelVAAlloca = new AllocaInst(
|
||||
LabelVATy, "labelva", &DFSF.F->getEntryBlock().front());
|
||||
|
||||
for (unsigned n = 0; i != CS.arg_end(); ++i, ++n) {
|
||||
auto LabelVAPtr = IRB.CreateStructGEP(LabelVATy, LabelVAAlloca, n);
|
||||
@ -1508,7 +1508,7 @@ void DFSanVisitor::visitCallSite(CallSite CS) {
|
||||
if (!DFSF.LabelReturnAlloca) {
|
||||
DFSF.LabelReturnAlloca =
|
||||
new AllocaInst(DFSF.DFS.ShadowTy, "labelreturn",
|
||||
DFSF.F->getEntryBlock().begin());
|
||||
&DFSF.F->getEntryBlock().front());
|
||||
}
|
||||
Args.push_back(DFSF.LabelReturnAlloca);
|
||||
}
|
||||
@ -1547,13 +1547,14 @@ void DFSanVisitor::visitCallSite(CallSite CS) {
|
||||
if (!CS.getType()->isVoidTy()) {
|
||||
if (InvokeInst *II = dyn_cast<InvokeInst>(CS.getInstruction())) {
|
||||
if (II->getNormalDest()->getSinglePredecessor()) {
|
||||
Next = II->getNormalDest()->begin();
|
||||
Next = &II->getNormalDest()->front();
|
||||
} else {
|
||||
BasicBlock *NewBB =
|
||||
SplitEdge(II->getParent(), II->getNormalDest(), &DFSF.DT);
|
||||
Next = NewBB->begin();
|
||||
Next = &NewBB->front();
|
||||
}
|
||||
} else {
|
||||
assert(CS->getIterator() != CS->getParent()->end());
|
||||
Next = CS->getNextNode();
|
||||
}
|
||||
|
||||
@ -1586,7 +1587,7 @@ void DFSanVisitor::visitCallSite(CallSite CS) {
|
||||
unsigned VarArgSize = CS.arg_size() - FT->getNumParams();
|
||||
ArrayType *VarArgArrayTy = ArrayType::get(DFSF.DFS.ShadowTy, VarArgSize);
|
||||
AllocaInst *VarArgShadow =
|
||||
new AllocaInst(VarArgArrayTy, "", DFSF.F->getEntryBlock().begin());
|
||||
new AllocaInst(VarArgArrayTy, "", &DFSF.F->getEntryBlock().front());
|
||||
Args.push_back(IRB.CreateConstGEP2_32(VarArgArrayTy, VarArgShadow, 0, 0));
|
||||
for (unsigned n = 0; i != e; ++i, ++n) {
|
||||
IRB.CreateStore(
|
||||
|
@ -347,8 +347,8 @@ namespace {
|
||||
std::string EdgeDestinations;
|
||||
raw_string_ostream EDOS(EdgeDestinations);
|
||||
Function *F = Blocks.begin()->first->getParent();
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
GCOVBlock &Block = getBlock(I);
|
||||
for (BasicBlock &I : *F) {
|
||||
GCOVBlock &Block = getBlock(&I);
|
||||
for (int i = 0, e = Block.OutEdges.size(); i != e; ++i)
|
||||
EDOS << Block.OutEdges[i]->Number;
|
||||
}
|
||||
@ -389,8 +389,8 @@ namespace {
|
||||
// Emit edges between blocks.
|
||||
if (Blocks.empty()) return;
|
||||
Function *F = Blocks.begin()->first->getParent();
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
GCOVBlock &Block = getBlock(I);
|
||||
for (BasicBlock &I : *F) {
|
||||
GCOVBlock &Block = getBlock(&I);
|
||||
if (Block.OutEdges.empty()) continue;
|
||||
|
||||
writeBytes(EdgeTag, 4);
|
||||
@ -405,9 +405,8 @@ namespace {
|
||||
}
|
||||
|
||||
// Emit lines for each block.
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
getBlock(I).writeOut();
|
||||
}
|
||||
for (BasicBlock &I : *F)
|
||||
getBlock(&I).writeOut();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -513,7 +512,7 @@ void GCOVProfiler::emitProfileNotes() {
|
||||
GCOVFunction &Func = *Funcs.back();
|
||||
|
||||
for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) {
|
||||
GCOVBlock &Block = Func.getBlock(BB);
|
||||
GCOVBlock &Block = Func.getBlock(&*BB);
|
||||
TerminatorInst *TI = BB->getTerminator();
|
||||
if (int successors = TI->getNumSuccessors()) {
|
||||
for (int i = 0; i != successors; ++i) {
|
||||
@ -605,7 +604,7 @@ bool GCOVProfiler::emitProfileArcs() {
|
||||
int Successors = isa<ReturnInst>(TI) ? 1 : TI->getNumSuccessors();
|
||||
if (Successors) {
|
||||
if (Successors == 1) {
|
||||
IRBuilder<> Builder(BB->getFirstInsertionPt());
|
||||
IRBuilder<> Builder(&*BB->getFirstInsertionPt());
|
||||
Value *Counter = Builder.CreateConstInBoundsGEP2_64(Counters, 0,
|
||||
Edge);
|
||||
Value *Count = Builder.CreateLoad(Counter);
|
||||
@ -625,7 +624,7 @@ bool GCOVProfiler::emitProfileArcs() {
|
||||
Count = Builder.CreateAdd(Count, Builder.getInt64(1));
|
||||
Builder.CreateStore(Count, Counter);
|
||||
} else {
|
||||
ComplexEdgePreds.insert(BB);
|
||||
ComplexEdgePreds.insert(&*BB);
|
||||
for (int i = 0; i != Successors; ++i)
|
||||
ComplexEdgeSuccs.insert(TI->getSuccessor(i));
|
||||
}
|
||||
@ -641,13 +640,13 @@ bool GCOVProfiler::emitProfileArcs() {
|
||||
GlobalVariable *EdgeState = getEdgeStateValue();
|
||||
|
||||
for (int i = 0, e = ComplexEdgePreds.size(); i != e; ++i) {
|
||||
IRBuilder<> Builder(ComplexEdgePreds[i + 1]->getFirstInsertionPt());
|
||||
IRBuilder<> Builder(&*ComplexEdgePreds[i + 1]->getFirstInsertionPt());
|
||||
Builder.CreateStore(Builder.getInt32(i), EdgeState);
|
||||
}
|
||||
|
||||
for (int i = 0, e = ComplexEdgeSuccs.size(); i != e; ++i) {
|
||||
// Call runtime to perform increment.
|
||||
IRBuilder<> Builder(ComplexEdgeSuccs[i+1]->getFirstInsertionPt());
|
||||
IRBuilder<> Builder(&*ComplexEdgeSuccs[i + 1]->getFirstInsertionPt());
|
||||
Value *CounterPtrArray =
|
||||
Builder.CreateConstInBoundsGEP2_64(EdgeTable, 0,
|
||||
i * ComplexEdgePreds.size());
|
||||
@ -731,8 +730,8 @@ GlobalVariable *GCOVProfiler::buildEdgeLookupTable(
|
||||
IRBuilder<> Builder(Succ);
|
||||
Value *Counter = Builder.CreateConstInBoundsGEP2_64(Counters, 0,
|
||||
Edge + i);
|
||||
EdgeTable[((Succs.idFor(Succ)-1) * Preds.size()) +
|
||||
(Preds.idFor(BB)-1)] = cast<Constant>(Counter);
|
||||
EdgeTable[((Succs.idFor(Succ) - 1) * Preds.size()) +
|
||||
(Preds.idFor(&*BB) - 1)] = cast<Constant>(Counter);
|
||||
}
|
||||
}
|
||||
Edge += Successors;
|
||||
@ -901,7 +900,7 @@ void GCOVProfiler::insertIndirectCounterIncrement() {
|
||||
|
||||
// uint32_t pred = *predecessor;
|
||||
// if (pred == 0xffffffff) return;
|
||||
Argument *Arg = Fn->arg_begin();
|
||||
Argument *Arg = &*Fn->arg_begin();
|
||||
Arg->setName("predecessor");
|
||||
Value *Pred = Builder.CreateLoad(Arg, "pred");
|
||||
Value *Cond = Builder.CreateICmpEQ(Pred, Builder.getInt32(0xffffffff));
|
||||
@ -912,7 +911,7 @@ void GCOVProfiler::insertIndirectCounterIncrement() {
|
||||
// uint64_t *counter = counters[pred];
|
||||
// if (!counter) return;
|
||||
Value *ZExtPred = Builder.CreateZExt(Pred, Builder.getInt64Ty());
|
||||
Arg = std::next(Fn->arg_begin());
|
||||
Arg = &*std::next(Fn->arg_begin());
|
||||
Arg->setName("counters");
|
||||
Value *GEP = Builder.CreateGEP(Type::getInt64PtrTy(*Ctx), Arg, ZExtPred);
|
||||
Value *Counter = Builder.CreateLoad(GEP, "counter");
|
||||
|
@ -144,7 +144,7 @@ bool InstrProfiling::runOnModule(Module &M) {
|
||||
void InstrProfiling::lowerIncrement(InstrProfIncrementInst *Inc) {
|
||||
GlobalVariable *Counters = getOrCreateRegionCounters(Inc);
|
||||
|
||||
IRBuilder<> Builder(Inc->getParent(), *Inc);
|
||||
IRBuilder<> Builder(Inc);
|
||||
uint64_t Index = Inc->getIndex()->getZExtValue();
|
||||
Value *Addr = Builder.CreateConstInBoundsGEP2_64(Counters, 0, Index);
|
||||
Value *Count = Builder.CreateLoad(Addr, "pgocount");
|
||||
|
@ -26,7 +26,7 @@ static BasicBlock::iterator moveBeforeInsertPoint(BasicBlock::iterator I, BasicB
|
||||
if (I == IP)
|
||||
return ++IP;
|
||||
// Otherwise, move I before IP and return IP.
|
||||
I->moveBefore(IP);
|
||||
I->moveBefore(&*IP);
|
||||
return IP;
|
||||
}
|
||||
|
||||
|
@ -737,7 +737,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
Value *Cmp = IRB.CreateICmpNE(
|
||||
ConvertedShadow, getCleanShadow(ConvertedShadow), "_mscmp");
|
||||
Instruction *CheckTerm = SplitBlockAndInsertIfThen(
|
||||
Cmp, IRB.GetInsertPoint(), false, MS.OriginStoreWeights);
|
||||
Cmp, &*IRB.GetInsertPoint(), false, MS.OriginStoreWeights);
|
||||
IRBuilder<> IRBNew(CheckTerm);
|
||||
paintOrigin(IRBNew, updateOrigin(Origin, IRBNew),
|
||||
getOriginPtr(Addr, IRBNew, Alignment), StoreSize,
|
||||
@ -2551,9 +2551,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
// Until we have full dynamic coverage, make sure the retval shadow is 0.
|
||||
Value *Base = getShadowPtrForRetval(&I, IRBBefore);
|
||||
IRBBefore.CreateAlignedStore(getCleanShadow(&I), Base, kShadowTLSAlignment);
|
||||
Instruction *NextInsn = nullptr;
|
||||
BasicBlock::iterator NextInsn;
|
||||
if (CS.isCall()) {
|
||||
NextInsn = I.getNextNode();
|
||||
NextInsn = ++I.getIterator();
|
||||
assert(NextInsn != I.getParent()->end());
|
||||
} else {
|
||||
BasicBlock *NormalDest = cast<InvokeInst>(&I)->getNormalDest();
|
||||
if (!NormalDest->getSinglePredecessor()) {
|
||||
@ -2565,10 +2566,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
return;
|
||||
}
|
||||
NextInsn = NormalDest->getFirstInsertionPt();
|
||||
assert(NextInsn &&
|
||||
assert(NextInsn != NormalDest->end() &&
|
||||
"Could not find insertion point for retval shadow load");
|
||||
}
|
||||
IRBuilder<> IRBAfter(NextInsn);
|
||||
IRBuilder<> IRBAfter(&*NextInsn);
|
||||
Value *RetvalShadow =
|
||||
IRBAfter.CreateAlignedLoad(getShadowPtrForRetval(&I, IRBAfter),
|
||||
kShadowTLSAlignment, "_msret");
|
||||
|
@ -596,7 +596,7 @@ bool SafeStack::runOnFunction(Function &F) {
|
||||
if (!StackRestorePoints.empty())
|
||||
++NumUnsafeStackRestorePointsFunctions;
|
||||
|
||||
IRBuilder<> IRB(F.begin()->getFirstInsertionPt());
|
||||
IRBuilder<> IRB(&F.front(), F.begin()->getFirstInsertionPt());
|
||||
UnsafeStackPtr = getOrCreateUnsafeStackPtr(IRB, F);
|
||||
|
||||
// The top of the unsafe stack after all unsafe static allocas are allocated.
|
||||
|
@ -459,7 +459,7 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
|
||||
EntryLoc = IP->getDebugLoc();
|
||||
}
|
||||
|
||||
IRBuilder<> IRB(IP);
|
||||
IRBuilder<> IRB(&*IP);
|
||||
IRB.SetCurrentDebugLocation(EntryLoc);
|
||||
Value *GuardP = IRB.CreateAdd(
|
||||
IRB.CreatePointerCast(GuardArray, IntptrTy),
|
||||
@ -475,7 +475,7 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
|
||||
SetNoSanitizeMetadata(Load);
|
||||
Value *Cmp = IRB.CreateICmpSGE(Constant::getNullValue(Load->getType()), Load);
|
||||
Instruction *Ins = SplitBlockAndInsertIfThen(
|
||||
Cmp, IP, false, MDBuilder(*C).createBranchWeights(1, 100000));
|
||||
Cmp, &*IP, false, MDBuilder(*C).createBranchWeights(1, 100000));
|
||||
IRB.SetInsertPoint(Ins);
|
||||
IRB.SetCurrentDebugLocation(EntryLoc);
|
||||
// __sanitizer_cov gets the PC of the instruction using GET_CALLER_PC.
|
||||
@ -484,7 +484,7 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
|
||||
}
|
||||
|
||||
if (Options.Use8bitCounters) {
|
||||
IRB.SetInsertPoint(IP);
|
||||
IRB.SetInsertPoint(&*IP);
|
||||
Value *P = IRB.CreateAdd(
|
||||
IRB.CreatePointerCast(EightBitCounterArray, IntptrTy),
|
||||
ConstantInt::get(IntptrTy, NumberOfInstrumentedBlocks() - 1));
|
||||
@ -499,7 +499,7 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
|
||||
if (Options.TraceBB) {
|
||||
// Experimental support for tracing.
|
||||
// Insert a callback with the same guard variable as used for coverage.
|
||||
IRB.SetInsertPoint(IP);
|
||||
IRB.SetInsertPoint(&*IP);
|
||||
IRB.CreateCall(IsEntryBB ? SanCovTraceEnter : SanCovTraceBB, GuardP);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user