[klee-dev] Adding klee_assert to LLVM IR
Rasool Maghareh
rasool at comp.nus.edu.sg
Mon Sep 3 06:29:04 BST 2018
Hello all,
I am adding klee_assert manually to LLVM IR. I notice that KLEE
terminates the paths
when reaching klee_assert. However, if I add klee_assert to the C code
before
compilation KLEE continues the path to the end after reaching the
klee_assert.
This is important for me since sometimes a path violates more than one
klee_assert
and I want KLEE to catch them all.
I have tried both with and without --emit-all-errors, but problem exists.
I am using the following code to create the call to the assert_fail
function.
//new fail basic block
llvm::BasicBlock *fail =
llvm::BasicBlock::Create(llvm::getGlobalContext(),"fail", &F);
llvm::IRBuilder<> builder2(fail);
//begin of klee_assert
llvm::Constant *c = M->getOrInsertFunction(
"__assert_fail",
llvm::FunctionType::getVoidTy(F.getContext()),
llvm::Type::getInt8PtrTy(F.getContext()),
llvm::Type::getInt8PtrTy(F.getContext()),
llvm::IntegerType::get(llvm::getGlobalContext(), 32),
llvm::Type::getInt8PtrTy(F.getContext()),
NULL);
llvm::Function *assert_fail = llvm::dyn_cast<llvm::Function>(c);
llvm::Value *message = builder2.CreateGlobalStringPtr(msgString, ".str");
llvm::Value *file = builder2.CreateGlobalStringPtr("",".str");
llvm::ConstantInt *line = builder2.getInt32(0);
llvm::Value *function = builder2.CreateGlobalStringPtr("main",".str");
builder2.CreateCall4(assert_fail, message, file,line, function);
I would be thankful if anyone can help informing which part I am doing
incorrectly.
Thanks & Regards
Rasool
More information about the klee-dev
mailing list