2017-09-20 5 views
0

現在、LLVMを使ってパスを書いていますが、変数/パラメータ/引数名に関していくつか質問があります。LLVMで名前を抽出するIR

  1. が、私はこの構造体を持っていると言う:

    struct Kid { 
        char name[30]; 
        int age; 
        char hobby[30]; 
    }; 
    

私は、モジュールのパスを実行し、モジュールにStructType対応Kid年代を見つけましたよ。私はKidのメンバーの名前を使用したいが、私はそれらにアクセスする方法を知らない。私はelement_iteratorを使用しようとしましたが、メンバーはTypeとして返されます。構造体のデータメンバーの名前にアクセスするにはどうすればよいですか?

EDIT:これは、私が現在扱っている 'char'型のメンバーが 'name'か 'hobby'かどうかを判断できるようにするためです。場合。次のようなものがあります:

case "name" do something; 
    case "hobby" do something else; 

同じ種類のメンバーと区別する別の方法はありますか?

  1. 私には機能がありますfoo(int a, int b)と言います。 関数のパラメータの名前を取得するにはどうすればよいですか? fooの呼び出しでarg_iteratorを実行して 引数を見つけようとしましたが、引数にgetName()を呼び出すと、空のStringRefが返されます。

助けていただければ幸いです。

答えて

1

LLVM IRには「フィールド名」はありません。実際、型の名前はデバッグの目的でのみ使用されることを意図しているので、決してそれらに依存するべきではありません。引数を表すために使用される値の名前と同じです。簡単に取り除くことができます。

ソース名が必要な場合は、デバッグ情報に頼る必要があります。

+0

よろしくお願いいたします。私は何をしたいかについてより具体的に質問を編集します。 2番目の質問はどうですか? – baronzo1

+0

私は2番目の質問にも答えました。すべての「名前」はソースレベルの機能なので、IRには含まれていません。これは、理由のためである。そうしなければ、C/C++の組合やビットフィールドを扱うことができなくなります。したがって、ソースレベルのものを使用する必要がある場合は、フロントエンド内のすべてを実行する必要があります。または、他の方法で必要な情報を復元します。デバッグ情報。 –

+0

ええ、私はそのコメントを編集したいと思っていました。 ありがとうございました! – baronzo1

関連する問題