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,因此找出的一种方法是生成所有树和 RTL 转储,gcc -fdump-tree-all -fdump-rtl-all然后对它们进行二进制搜索以定位进行转换的通道。

于 2010-01-18T16:25:34.303 回答