4

&ptr->fldは間接参照を表していません。代わりに、として処理する必要があります(uint32_t)ptr + offsetof (ptr, fld)。GCC がこの単純化を行っていることは確かですが、コードのどこを見つけることができません。

上記ADDR_EXPR(COMPONENT_REF (INDIRECT_REF (ptr), fld))は最終的にASTのようになりますが、ある時点でそれを通過して単純化する必要があります。gcc ツリー内の ADDR_EXPR、COMPONENT_REF、および INDIRECT_REF のほぼすべての出現箇所を調べたところ、どこにあるかを見つけるのに苦労しています。何か案は?

GCC の人々に助けを求めようとしたことに注意してください。一般的に、それらはかなり役に立ちませんが、ここにいる人々は答えを知っているかもしれません. これが悪い質問である場合、それが閉じられているかどうかはわかります。

4

1 に答える 1

1

すでに GCC の AST に精通しているため、見つける方法の 1 つは、すべてのツリーと RTL ダンプを生成しgcc -fdump-tree-all -fdump-rtl-all、それらをバイナリ検索して、変換を行うパスをローカライズすることです。

于 2010-01-18T16:25:34.303 に答える