LLVM分割故障 /需要使用指令而不是指令*
LLVM segmentation fault / need use Instruction instead of Instruction*
我在运行LLVM通行证时具有分段故障。我需要在基本块之外使用迭代"循环"以外的bbterinators数组。似乎LLVM在循环中迭代时没有保护地址(注意:TerminatorInst *BasicBlock::getTerminator()
),因此我需要将BBTerminators保持在Instruction
类型的变量中,而不是Instruction *
。如何将整个Instructions
复制到BBterminators
?
for (Function::iterator II = F.begin(), EE = F.end(); II != EE; ++II, ++ii)
{
BasicBlock* BB = (dyn_cast<BasicBlock>(II));
if (BB->getTerminator())
{
Instruction *current = BB->getTerminator();
Instruction *previous = current->getPrevNode();
if (current->getOpcode() == Instruction::Br)
{
BBterminators[ii] = current;
其中 Instruction **BBterminators = new Instruction *[100];
我不确定在这里"保护"您的意思。在BB上迭代并查看其终结者当然不会使指示指针无效,因此只要您安全地不删除任何东西,就可以保留它们。无论如何,您也可以通过调用clone
来复制Instruction*
对象(请注意,Instruction
不可用COPY CTOR和分配操作员逐个设计)。这样的东西:
virtual bool runOnFunction(Function &F) {
std::vector<Instruction*> terminators;
for (Function::iterator bb = F.begin(), bb_e = F.end(); bb != bb_e; ++bb) {
terminators.push_back(bb->getTerminator()->clone());
}
...
...
}
完成后,不要忘记释放您的副本。
引入条件
if ( !(II->empty()) && II->back().isTerminator() )
计算之前
相关文章:
- 分段故障(堆芯转储)矢量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- C++中的动态铸造故障
- 数组的指针从不分段故障
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 函数名是c中该函数的第一条指令的地址吗
- 错误:无效的预处理指令 #i 的意思是 #if?
- 调试 CUDA MMU 故障
- 组装指令中乘法的下部和上部是什么
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- OpenMP 与有序和关键指令并行
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- C++CMake编译指令与
- LLVM分割故障 /需要使用指令而不是指令*