Support TARGET_MEM_REFs when walking subtress searching for ADDR_EXPR.  This
scenario presents itself when walking MEM_REF subtrees looking for addr-taken
entities during the execute_update_addresses_taken () pass where address-taken
bitmaps are updated.

gcc/ChangeLog:

        * gimple-walk.cc (walk_stmt_load_store_addr_ops): Support
        TARGET_MEM_REF tree op in the address-tree walker.
---
 gcc/gimple-walk.cc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/gcc/gimple-walk.cc b/gcc/gimple-walk.cc
index eceda41778d..7fb38d7d2c2 100644
--- a/gcc/gimple-walk.cc
+++ b/gcc/gimple-walk.cc
@@ -803,6 +803,10 @@ walk_stmt_load_store_addr_ops (gimple *stmt, void *data,
                   && TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
            ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
                                                   0), arg, data);
+         else if (TREE_CODE (rhs) == TARGET_MEM_REF
+                  && TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
+           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs),
+                                                  0), arg, data);
          else if (TREE_CODE (rhs) == CONSTRUCTOR)
            {
              unsigned int ix;
-- 
2.25.1

Reply via email to