Lines Matching refs:I
75 void visitMemoryReference(Instruction &I, Value *Ptr,
81 void visitCallInst(CallInst &I);
82 void visitInvokeInst(InvokeInst &I);
83 void visitReturnInst(ReturnInst &I);
84 void visitLoadInst(LoadInst &I);
85 void visitStoreInst(StoreInst &I);
86 void visitXor(BinaryOperator &I);
87 void visitSub(BinaryOperator &I);
88 void visitLShr(BinaryOperator &I);
89 void visitAShr(BinaryOperator &I);
90 void visitShl(BinaryOperator &I);
91 void visitSDiv(BinaryOperator &I);
92 void visitUDiv(BinaryOperator &I);
93 void visitSRem(BinaryOperator &I);
94 void visitURem(BinaryOperator &I);
95 void visitAllocaInst(AllocaInst &I);
96 void visitVAArgInst(VAArgInst &I);
97 void visitIndirectBrInst(IndirectBrInst &I);
98 void visitExtractElementInst(ExtractElementInst &I);
99 void visitInsertElementInst(InsertElementInst &I);
100 void visitUnreachableInst(UnreachableInst &I);
204 Instruction &I = *CS.getInstruction(); in visitCallSite() local
207 visitMemoryReference(I, Callee, MemoryLocation::UnknownSize, 0, nullptr, in visitCallSite()
214 &I); in visitCallSite()
223 &I); in visitCallSite()
225 Assert(FT->getReturnType() == I.getType(), in visitCallSite()
228 &I); in visitCallSite()
241 &I); in visitCallSite()
251 "Unusual: noalias argument aliases another argument", &I); in visitCallSite()
258 visitMemoryReference(I, Actual, DL->getTypeStoreSize(Ty), in visitCallSite()
273 &I); in visitCallSite()
277 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(&I)) in visitCallSite()
284 MemCpyInst *MCI = cast<MemCpyInst>(&I); in visitCallSite()
286 visitMemoryReference(I, MCI->getDest(), MemoryLocation::UnknownSize, in visitCallSite()
288 visitMemoryReference(I, MCI->getSource(), MemoryLocation::UnknownSize, in visitCallSite()
302 "Undefined behavior: memcpy source and destination overlap", &I); in visitCallSite()
306 MemMoveInst *MMI = cast<MemMoveInst>(&I); in visitCallSite()
308 visitMemoryReference(I, MMI->getDest(), MemoryLocation::UnknownSize, in visitCallSite()
310 visitMemoryReference(I, MMI->getSource(), MemoryLocation::UnknownSize, in visitCallSite()
315 MemSetInst *MSI = cast<MemSetInst>(&I); in visitCallSite()
317 visitMemoryReference(I, MSI->getDest(), MemoryLocation::UnknownSize, in visitCallSite()
323 Assert(I.getParent()->getParent()->isVarArg(), in visitCallSite()
325 &I); in visitCallSite()
327 visitMemoryReference(I, CS.getArgument(0), MemoryLocation::UnknownSize, 0, in visitCallSite()
331 visitMemoryReference(I, CS.getArgument(0), MemoryLocation::UnknownSize, 0, in visitCallSite()
333 visitMemoryReference(I, CS.getArgument(1), MemoryLocation::UnknownSize, 0, in visitCallSite()
337 visitMemoryReference(I, CS.getArgument(0), MemoryLocation::UnknownSize, 0, in visitCallSite()
345 visitMemoryReference(I, CS.getArgument(0), MemoryLocation::UnknownSize, 0, in visitCallSite()
351 void Lint::visitCallInst(CallInst &I) { in visitCallInst() argument
352 return visitCallSite(&I); in visitCallInst()
355 void Lint::visitInvokeInst(InvokeInst &I) { in visitInvokeInst() argument
356 return visitCallSite(&I); in visitInvokeInst()
359 void Lint::visitReturnInst(ReturnInst &I) { in visitReturnInst() argument
360 Function *F = I.getParent()->getParent(); in visitReturnInst()
362 "Unusual: Return statement in function with noreturn attribute", &I); in visitReturnInst()
364 if (Value *V = I.getReturnValue()) { in visitReturnInst()
366 Assert(!isa<AllocaInst>(Obj), "Unusual: Returning alloca value", &I); in visitReturnInst()
372 void Lint::visitMemoryReference(Instruction &I, in visitMemoryReference() argument
382 "Undefined behavior: Null pointer dereference", &I); in visitMemoryReference()
384 "Undefined behavior: Undef pointer dereference", &I); in visitMemoryReference()
387 "Unusual: All-ones pointer dereference", &I); in visitMemoryReference()
390 "Unusual: Address one pointer dereference", &I); in visitMemoryReference()
395 &I); in visitMemoryReference()
398 "Undefined behavior: Write to text section", &I); in visitMemoryReference()
402 &I); in visitMemoryReference()
404 "Undefined behavior: Load from block address", &I); in visitMemoryReference()
408 "Undefined behavior: Call to block address", &I); in visitMemoryReference()
413 "Undefined behavior: Branch to non-blockaddress", &I); in visitMemoryReference()
452 "Undefined behavior: Buffer overflow", &I); in visitMemoryReference()
459 "Undefined behavior: Memory reference address is misaligned", &I); in visitMemoryReference()
463 void Lint::visitLoadInst(LoadInst &I) { in visitLoadInst() argument
464 visitMemoryReference(I, I.getPointerOperand(), in visitLoadInst()
465 DL->getTypeStoreSize(I.getType()), I.getAlignment(), in visitLoadInst()
466 I.getType(), MemRef::Read); in visitLoadInst()
469 void Lint::visitStoreInst(StoreInst &I) { in visitStoreInst() argument
470 visitMemoryReference(I, I.getPointerOperand(), in visitStoreInst()
471 DL->getTypeStoreSize(I.getOperand(0)->getType()), in visitStoreInst()
472 I.getAlignment(), in visitStoreInst()
473 I.getOperand(0)->getType(), MemRef::Write); in visitStoreInst()
476 void Lint::visitXor(BinaryOperator &I) { in visitXor() argument
477 Assert(!isa<UndefValue>(I.getOperand(0)) || !isa<UndefValue>(I.getOperand(1)), in visitXor()
478 "Undefined result: xor(undef, undef)", &I); in visitXor()
481 void Lint::visitSub(BinaryOperator &I) { in visitSub() argument
482 Assert(!isa<UndefValue>(I.getOperand(0)) || !isa<UndefValue>(I.getOperand(1)), in visitSub()
483 "Undefined result: sub(undef, undef)", &I); in visitSub()
486 void Lint::visitLShr(BinaryOperator &I) { in visitLShr() argument
487 if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getOperand(1), in visitLShr()
489 Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()), in visitLShr()
490 "Undefined result: Shift count out of range", &I); in visitLShr()
493 void Lint::visitAShr(BinaryOperator &I) { in visitAShr() argument
495 dyn_cast<ConstantInt>(findValue(I.getOperand(1), /*OffsetOk=*/false))) in visitAShr()
496 Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()), in visitAShr()
497 "Undefined result: Shift count out of range", &I); in visitAShr()
500 void Lint::visitShl(BinaryOperator &I) { in visitShl() argument
502 dyn_cast<ConstantInt>(findValue(I.getOperand(1), /*OffsetOk=*/false))) in visitShl()
503 Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()), in visitShl()
504 "Undefined result: Shift count out of range", &I); in visitShl()
533 for (unsigned I = 0, N = VecTy->getNumElements(); I != N; ++I) { in isZero() local
534 Constant *Elem = C->getAggregateElement(I); in isZero()
547 void Lint::visitSDiv(BinaryOperator &I) { in visitSDiv() argument
548 Assert(!isZero(I.getOperand(1), I.getModule()->getDataLayout(), DT, AC), in visitSDiv()
549 "Undefined behavior: Division by zero", &I); in visitSDiv()
552 void Lint::visitUDiv(BinaryOperator &I) { in visitUDiv() argument
553 Assert(!isZero(I.getOperand(1), I.getModule()->getDataLayout(), DT, AC), in visitUDiv()
554 "Undefined behavior: Division by zero", &I); in visitUDiv()
557 void Lint::visitSRem(BinaryOperator &I) { in visitSRem() argument
558 Assert(!isZero(I.getOperand(1), I.getModule()->getDataLayout(), DT, AC), in visitSRem()
559 "Undefined behavior: Division by zero", &I); in visitSRem()
562 void Lint::visitURem(BinaryOperator &I) { in visitURem() argument
563 Assert(!isZero(I.getOperand(1), I.getModule()->getDataLayout(), DT, AC), in visitURem()
564 "Undefined behavior: Division by zero", &I); in visitURem()
567 void Lint::visitAllocaInst(AllocaInst &I) { in visitAllocaInst() argument
568 if (isa<ConstantInt>(I.getArraySize())) in visitAllocaInst()
570 Assert(&I.getParent()->getParent()->getEntryBlock() == I.getParent(), in visitAllocaInst()
571 "Pessimization: Static alloca outside of entry block", &I); in visitAllocaInst()
576 void Lint::visitVAArgInst(VAArgInst &I) { in visitVAArgInst() argument
577 visitMemoryReference(I, I.getOperand(0), MemoryLocation::UnknownSize, 0, in visitVAArgInst()
581 void Lint::visitIndirectBrInst(IndirectBrInst &I) { in visitIndirectBrInst() argument
582 visitMemoryReference(I, I.getAddress(), MemoryLocation::UnknownSize, 0, in visitIndirectBrInst()
585 Assert(I.getNumDestinations() != 0, in visitIndirectBrInst()
586 "Undefined behavior: indirectbr with no destinations", &I); in visitIndirectBrInst()
589 void Lint::visitExtractElementInst(ExtractElementInst &I) { in visitExtractElementInst() argument
590 if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getIndexOperand(), in visitExtractElementInst()
592 Assert(CI->getValue().ult(I.getVectorOperandType()->getNumElements()), in visitExtractElementInst()
593 "Undefined result: extractelement index out of range", &I); in visitExtractElementInst()
596 void Lint::visitInsertElementInst(InsertElementInst &I) { in visitInsertElementInst() argument
597 if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getOperand(2), in visitInsertElementInst()
599 Assert(CI->getValue().ult(I.getType()->getNumElements()), in visitInsertElementInst()
600 "Undefined result: insertelement index out of range", &I); in visitInsertElementInst()
603 void Lint::visitUnreachableInst(UnreachableInst &I) { in visitUnreachableInst() argument
605 Assert(&I == &I.getParent()->front() || in visitUnreachableInst()
606 std::prev(I.getIterator())->mayHaveSideEffects(), in visitUnreachableInst()
609 &I); in visitUnreachableInst()