表达式&ptr->fld
不代表取消引用,而应将其视为(uint32_t)ptr + offsetof (ptr, fld)
。我确信GCC会进行这种简化,但我找不到代码中的位置。
以上结果在AST中以ADDR_EXPR(COMPONENT_REF (INDIRECT_REF (ptr), fld))
结束,但在某些时候它应该通过并简化它。在gcc树中查找几乎每次出现的ADDR_EXPR,COMPONENT_REF和INDIRECT_REF时,我都无法找到位置。有什么想法吗?
请注意,我试过寻求GCC人员的帮助。一般来说,他们都没有帮助,但这里的人可能知道答案。如果这是一个糟糕的问题,我会理解它是否已关闭。
答案 0 :(得分:1)
由于您已经熟悉GCC的AST,因此找到的方法之一是使用gcc -fdump-tree-all -fdump-rtl-all
生成所有树和RTL转储,然后通过它们进行二进制搜索以本地化进行转换的传递。