【发布时间】:2014-12-28 15:03:57
【问题描述】:
在函数迭代器循环中,当我输入以下代码时
for(BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI)
{
if(isa<StoreInst>(&(*BI)) )
{
if(i==0)
{
Value *Two = ConstantInt::get(Type::getInt32Ty(Context), 2);
Value *Three = ConstantInt::get(Type::getInt32Ty(Context), 3);
Instruction *Add = BinaryOperator::Create(Instruction::Add, Two, Three,"addresult",(Instruction*)BI);
i=1;
}
}
}
然后我收到错误(在以下 input.bc 文件上应用此传递时 它是那个 input.bc 文件的 input.ll
define void @_Z3minv() #0 {
entry:
%k = alloca i32, align 4
%i = alloca i32, align 4
%j = alloca i32, align 4
store i32 10, i32* %i, align 4
store i32 5, i32* %j, align 4
%0 = load i32* %i, align 4
%1 = load i32* %j, align 4
%add = add nsw i32 %0, %1
store i32 %add, i32* %k, align 4
ret void}
使用命令 opt -load ../Release+Asserts/lib/Testing.so -insert (插入是我的通行证名称) 我正进入(状态:- 在删除 i32 时 Def 被销毁后使用仍然卡住:%addresult =add i32 2, 3
谁能解释一下这里发生了什么。
【问题讨论】:
-
这里没有删除任何内容;请提供一个最小的完整 IR 代码示例,只要提供导致问题的输入文件
-
@Eli Bendersky 我已经编辑了我的问题,所以请告诉我我缺少什么。谢谢