표현식 &ptr->fld
은 참조를 나타내지 않으므로 (uint32_t)ptr + offsetof (ptr, fld)
으로 처리해야합니다. 나는 GCC가이 단순화를 수행했음을 확신하지만 코드에서 어디에서 찾을 수없는 것입니다.GCC 내부 : 가짜 참조가 제거 된 곳은 어디입니까?
위의 내용은 AST에서 ADDR_EXPR(COMPONENT_REF (INDIRECT_REF (ptr), fld))
으로 끝납니다. 그러나 어느 시점에서는이를 통과시켜 단순화해야합니다. gcc 트리에서 ADDR_EXPR, COMPONENT_REF 및 INDIRECT_REF의 거의 모든 항목을 검색 했으므로 어디에 문제가 있는지 찾아야합니다. 어떤 아이디어?
나는 GCC 사람들로부터 도움을 구하려고 노력했다. 일반적으로 그들은별로 도움이되지 않지만 여기있는 사람들은 답을 알고있을 것입니다. 이 질문이 잘못된 경우 닫으면 이해할 것입니다.
"너무 지역화 된"것으로 폐쇄해야한다고 생각하지만 그래도 여전히 이점은 없습니다 –