在失败的断言中使用llvm::dyn_强制转换原因进行强制转换

在失败的断言中使用llvm::dyn_强制转换原因进行强制转换,llvm,assertion,Llvm,Assertion,错误消息: llvm/include/llvm/Support/Casting.h:240:typename llvm::cast_retty::ret_type llvm::cast(Y*)[使用X=llvm::PointerType,Y=llvm::type,typename llvm::cast_retty::ret_type=llvm::PointerType*]:断言`isa(Val)&“cast()参数类型不兼容!”失败 代码: Value *op1 = x->getOpera

错误消息: llvm/include/llvm/Support/Casting.h:240:typename llvm::cast_retty::ret_type llvm::cast(Y*)[使用X=llvm::PointerType,Y=llvm::type,typename llvm::cast_retty::ret_type=llvm::PointerType*]:断言`isa(Val)&“cast()参数类型不兼容!”失败

代码:

Value *op1 = x->getOperand(0);

bool flag1;

if(ConstantInt *CI = dyn_cast<ConstantInt>(op)){

  flag1=CI->isOne();

}
Value*op1=x->getOperator(0);
布尔flag1;
if(康斯坦丁*CI=dyn_铸造(op)){
flag1=CI->isOne();
}

我在谷歌上搜索,发现这是一个bug,但已修复。我最近下载了源代码并编译了它。有什么方法可以解决这个问题吗?

使用llvm 3.4稳定版后,这个问题就解决了。我之前使用的是最新的代码。

你肯定
op1
不是
NULL
?是的,我也尝试过使用_或_NULL。同样的错误!我只是在isa检查后使用(ConstantInt*)进行类型转换,而不是dyn_cast。另外,isOne()给出了错误(我不知道为什么),所以我使用getValue()并与1进行比较。