4

LLVM-3.0 では、名前付き構造体は常に一意であり、他の構造的に同じ構造体とのポインターの等価性は機能しません。LLVM-3.0 types に関するブログ エントリから、ハイライトは私のものです。

識別された構造は、私たちが話している種類のものです。それらは名前を持つことができ、型が作成された後に本体を指定することができます。識別された構造は、他の構造タイプと一意ではありません。これが、StructType::create(...) で生成される理由です。識別された型は潜在的に再帰的であるため、asmprinter は常にそれらの名前 (識別された構造体に名前がない場合は %42 のような番号) で出力します。

これにより、型ポインターのチェックによる型の等価性チェックが中断されます。たとえば、haskell パッケージllvmは、コンパイル時の型チェックと型キャストで等しい llvm 型ポインターに依存します。

2 つの構造体が同型 (同じ構造体) であることを確認する方法はありますか? できればllvm-c apiで?

4

1 に答える 1

2

C++ API では、StructTypeクラスに

bool StructType::isLayoutIdentical(StructType *Other) const

この関数は、StructTypes の要素を反復処理して、それらが等しいかどうかを確認します。

于 2013-01-16T05:03:53.983 に答える