在LLVM-3.0中,命名结构总是唯一的,与其他结构相同的结构的指针相等不起作用。从他们的关于LLVM-3.0类型的博客条目,重点是我的:
标识的结构就是我们所讨论的那种:它们可以有一个名称,并且可以在创建类型之后指定它们的主体。标识的结构与其他结构类型并不是唯一的,这就是为什么它们是用StructType::create(.)生成的。由于标识的类型可能是递归的,因此asm打印机总是按其名称打印它们(如果标识的结构没有名称,则打印的数字为%42 )。
这将通过类型指针检查来中断类型相等检查。例如,haskell包勒夫姆依赖于用于编译时类型检查和类型转换的llvm类型指针相等。
有没有办法检查两个结构是否同构(相同的结构)?最好是在llvm c api中?
发布于 2013-01-16 05:03:53
在C++ API中,StructType类具有
bool StructType::isLayoutIdentical(StructType *Other) const这个函数遍历StructTypes的元素,查看它们是否相等。
https://stackoverflow.com/questions/10398746
复制相似问题