我 正在 基于 LLVM 7.0.0 的 项目 上 工作 , 我 将 llvm 版本 从 3.5 转移 到 7.0.0 , 我 已经 构建 了 项目 , 并且 没有 问题 , 但是 当 我 在 一 个 . bc 文件 上 运行 llc 时 , 这里 的 bug 让 我 困惑 , 我 在 互联 网 上 找到 了 所有 的 东西 , 但 没有 解决 方案 , 这里 是 堆栈 转储 消息 :
第 106 章 : 我 的 天 , 我 的 地 , 我 的 天 !在 这个 例子 中 , 我们 使用 了 一 个 静态 的 bool 函数 , 它 是 一 个 bool 类型 的 函数 , 它 是 一 个 bool 类型 的 函数 。从 = llvm : : 复合 类型 ] :Assert ' Val & & " isa 〈 〉 用于 空 指针 " ' 失败 。
此处 代码 中 存在 错误 :
第 一 个
然后 , 当 我 调试 程序 时 , 发现 以下 消息 :
获取 元素 指针 类型 迭代 器 . h :
// FIXME: Make this the iterator's operator*() after the 4.0 release.
// operator*() had a different meaning in earlier releases, so we're
// temporarily not giving this iterator an operator*() to avoid a subtle
// semantics break.
Type *getIndexedType() const {
if (auto *T = CurTy.dyn_cast<Type *>())
return T;
return CurTy.get<StructType *>()->getTypeAtIndex(getOperand());
}
Value *getOperand() const { return const_cast<Value *>(&**OpIt); }
generic_gep_type_iterator &operator++() { // Preincrement
Type *Ty = getIndexedType();
if (auto *ATy = dyn_cast<ArrayType>(Ty))
CurTy = ATy->getElementType();
else if (auto *VTy = dyn_cast<VectorType>(Ty))
CurTy = VTy->getElementType();
else
CurTy = dyn_cast<StructType>(Ty);
++OpIt;
return *this;
}
generic_gep_type_iterator operator++(int) { // Postincrement
generic_gep_type_iterator tmp = *this;
++*this;
return tmp;
}
格式
"//修复 :在 4.0 版本 之后 , 使 此 为 迭代 器 的 operator * ( ) 。 " , 我 对 该 消息 希望 让 我 做 什么 感到 困惑 , 我 需要 在 该 位置 添加 或 修复 任何 内容 , 以便 有助于 修复 堆栈 转储 。
任何 建议 将 不胜 感激 , 非常 感谢 !
1条答案
按热度按时间yhuiod9q1#
您正在:
因此,如果
dyn_cast
失败,那么CurTy
可能是nullptr
,在下一个getIndexedType()
上,您将获得Assert。