2

これを行うのは非常に難しく、それを避けるべきであることはわかっていますが、これには理由があります。たとえば、コンパイル時にいくつかのフィールド宣言の順序を変更したい:

class A {
  char c;
  int i;
}

に向ける必要があります:

class A {
      int i;
      char c;
}

iとの順序を入れ替えることを選択した場合、そのフィールド宣言の をc変更する方法を知りたいlocationtree

どうすればこれを行うことができるか知っている人はいますか?? ありがとう !

g++ 4.9.2 バージョンのプラグインを使用しています

4

2 に答える 2

3

これを試すとしたら、2 つの異なるアプローチを試します。

  1. イベントにフックして、PLUGIN_FINISH_TYPEそこでタイプを書き換えます。書き直すには、フィールドを並べ替えて、型の再レイアウトを強制します。レイアウトを無効にして新しいレイアウトを強制する方法を理解するには、GCC ソースを少し読む必要があります。

  2. それがうまくいかない場合は、gimplification の直後に実行される新しいパスを追加し、そこに型を書き直してみてください。しかし、これはうまくいかない可能性が高いと思います。

于 2015-04-22T18:12:13.033 に答える