首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >llvm 3.9 ConstantExpr::getAsInstruction for Instruction::GetElementPtr get assertion

llvm 3.9 ConstantExpr::getAsInstruction for Instruction::GetElementPtr get assertion
EN

Stack Overflow用户
提问于 2016-09-21 20:53:32
回答 1查看 336关注 0票数 0

我从LLVM 3.6.1迁移到LLVM 3.9.0。在LLVMv3.6中,这段代码执行得很好,但在LLVMv3.9中,我发现断言失败:

代码语言:javascript
复制
... include/llvm/IR/Instructions.h:866: static llvm::GetElementPtrInst* llvm::GetElementPtrInst::Create(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&, llvm::Instruction*): Assertion `PointeeType == cast<PointerType>(Ptr->getType()->getScalarType())->getElementType()' failed.

我的代码是:

代码语言:javascript
复制
pOperand = pStore->getValueOperand();

if(!pOperand) 
    return;

pConstExpr = dyn_cast<ConstantExpr>(pOperand);

if(!pConstExpr)  
    return; 

if(pConstExpr->getOpcode() == Instruction::GetElementPtr)
{
     pGEPInst = dyn_cast<GetElementPtrInst>(pConstExpr->getAsInstruction());  // Assertion !!!
     if(!pGEPInst) 
         return;
     ... other code ...
}

编辑:

仅当LLVM-3.9.0的构建类型为DEBUG时,才会出现此问题。发布版本没有这个问题!

EN

回答 1

Stack Overflow用户

发布于 2016-09-30 19:32:51

我找到了我有问题的地方。这是我自己的错误。在LLVM-3.9.0的指令GetElementPtrInst中出现了参数“类型*指针类型”,但LLVM-3.6.1没有出现,这就是我的错误。

当我在LLVM-3.6.1中从源文件生成LLVM IR时,我得到了IR-line:

代码语言:javascript
复制
store i8* getelementptr inbounds ([14 x i8]* @.str1, i32 0, i32 0), i8** %2

在LLVM-3.9.0中,这一行:

代码语言:javascript
复制
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str1, i32 0, i32 0), i8** %2

在此之后,在两个版本中,我将全局变量@.str1更改为@globstr1,并在模块中的任何位置替换它。在LLVM-3.6.1中,此行转换为:

代码语言:javascript
复制
store i8* getelementptr inbounds ([17 x i8]* @globstr1, i32 0, i32 0), i8** %2

工作正常,但在LLVM-3.9.0中,这一行转换为:

代码语言:javascript
复制
store i8* getelementptr inbounds ([14 x i8], [17 x i8]* @globstr1, i32 0, i32 0), i8** %2

类型14 x i8未更改,此时出现断言故障。

编辑:

此问题仅在build with ASSERTS ( CMAKE的参数-DLLVM_ENABLE_ASSERTIONS=1。对于调试版本,此参数的默认值为ON )。在RELEASE-build中,它不会出现,因为parametr DLLVM_ENABLE_ASSERTIONS的默认值是off (发布版本的默认值)!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39617144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档