On Tue, Mar 8, 2022 at 4:31 PM Erick Ochoa via Gcc <gcc@gcc.gnu.org> wrote:
>
> Hi Martin!
>
> Thanks for replying, turns out that while I was trying to reply to you I
> was able to get the answer. Turns out there is indeed one tree node which
> is shared across the two functions. And that is
>
> TREE_OPERAND (MEM_REF, 1).
>
> When I was assigning to
>
> TREE_TYPE ( TREE_OPERAND (MEM_REF, 1) ) in one function, I was modifying
> the other. The solution was to create a new tree and assign it directly to
> TREE_OPERAND (MEM_REF, 1) in both functions.

Yes, that's because TREE_OPERAND (MEM_REF, 1) is an INTEGER_CST and
we share those.  See tree_node_can_be_shared in the sharing verifier.  Note
sharing also includes trees like &a.b.c[1].d for example.  The general rule of
thumb is to never directly modify trees but call unshare_expr () on them when
you do.

Richard.

>
> Thanks!

Reply via email to