在LLVM 3.0中是否有结构类型同构检查?

时间:2012-05-01 13:57:43

标签: llvm llvm-3.0

在LLVM-3.0中,命名结构总是唯一的,并且与其他结构相同的结构的指针相等也不起作用。从他们的blog entry on LLVM-3.0 types开始,重点是我的:

  

我们正在谈论的是已识别的结构:它们可以有一个名称,并且可以在创建类型后指定它们的主体。 已识别的结构不适用于其他结构类型,这就是使用StructType :: create(...)生成它们的原因。由于标识的类型可能是递归的,因此asmprinter始终按名称打印它们(如果标识的结构没有名称,则为%42的数字)。

这会通过类型指针检查来中断类型相等性检查。 例如,haskell包llvm依赖于llvm类型指针,它们对于编译时类型检查和类型转换是相同的。

有没有办法检查两个结构是同构的(相同的结构)?优选地,在llvm-c api?

1 个答案:

答案 0 :(得分:3)

在C ++ API中,StructType类有

bool StructType::isLayoutIdentical(StructType *Other) const

此函数遍历StructTypes的元素以查看它们是否相等。