由于这个问题有点难以描述,我将用一个小例子来描述我的问题.假设有一个命题公式集,其元素是布尔变量a,b和c.当使用z3获得该公式集的真值分配时,是否存在某种设置变量优先级的方法?我的意思是如果优先级是a> b> c,那么在搜索过程中,z3首先假定a为真,如果a不可能为真,则假定b为真,依此类推.换句话说,如果z3给出真值赋值:在上述优先级下不是a,b,c,则意味着a不可能为真,因为a与b相比具有高优先级.希望我能清楚地描述这个问题.
尝试创建对函数malloc的调用时遇到问题。以下是我用于将内存分配给指针的代码
Type* tp = argument->getType();
AllocaInst* arg_alloc = builder.CreateAlloca(tp);
if(tp->isPointerTy()){
if(!tp->getContainedType(0)->isPointerTy()){
Value *alloc_size = ConstantInt::get(Type::getInt64Ty(getGlobalContext()),
dl->getTypeAllocSize(tp->getPointerElementType()), false);
CallInst::CreateMalloc(arg_alloc, tp, tp->getPointerElementType(), alloc_size);
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误:
llvm-3.4/include/llvm/Support/Casting.h:239: typename
llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X =
llvm::IntegerType; Y = llvm::Type; typename llvm::cast_retty<X,
Y*>::ret_type = llvm::IntegerType*]: Assertion `isa<X>(Val) &&
"cast<Ty>() argument of incompatible type!"' failed.
0 libLLVM-3.4.so 0x00007f01246a4035 llvm::sys::PrintStackTrace(_IO_FILE*) + 37
1 libLLVM-3.4.so 0x00007f01246a3fb3
2 libpthread.so.0 0x00007f012392d340
3 libc.so.6 0x00007f0122a0cbb9 gsignal + 57
4 libc.so.6 0x00007f0122a0ffc8 abort + 328
5 libc.so.6 0x00007f0122a05a76
6 libc.so.6 0x00007f0122a05b22 …Run Code Online (Sandbox Code Playgroud) 在我的程序中使用assert时遇到了一个奇怪的问题.即使我添加一行代码,程序也不会终止assert(false).但是assert当我写几行示例代码时,它的工作原理.谁知道为什么会这样?