在LLVM-3.0中,命名结构总是唯一的,并且与其他结构相同的结构的指针相等也不起作用。从他们的blog entry on LLVM-3.0 types开始,重点是我的:
我们正在谈论的是已识别的结构:它们可以有一个名称,并且可以在创建类型后指定它们的主体。 已识别的结构不适用于其他结构类型,这就是使用StructType :: create(...)生成它们的原因。由于标识的类型可能是递归的,因此asmprinter始终按名称打印它们(如果标识的结构没有名称,则为%42的数字)。
这会通过类型指针检查来中断类型相等性检查。 例如,haskell包llvm依赖于llvm类型指针,它们对于编译时类型检查和类型转换是相同的。
有没有办法检查两个结构是同构的(相同的结构)?优选地,在llvm-c api?
中答案 0 :(得分:3)
在C ++ API中,StructType类有
bool StructType::isLayoutIdentical(StructType *Other) const
此函数遍历StructTypes的元素以查看它们是否相等。