aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.6/gcc/gimple.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.6/gcc/gimple.c')
-rw-r--r--gcc-4.6/gcc/gimple.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc-4.6/gcc/gimple.c b/gcc-4.6/gcc/gimple.c
index 233a4f5..bf8cc07 100644
--- a/gcc-4.6/gcc/gimple.c
+++ b/gcc-4.6/gcc/gimple.c
@@ -4943,6 +4943,20 @@ 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), data);
+ else if (TREE_CODE (rhs) == CONSTRUCTOR)
+ {
+ unsigned int ix;
+ tree val;
+
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
+ if (TREE_CODE (val) == ADDR_EXPR)
+ ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
+ else if (TREE_CODE (val) == OBJ_TYPE_REF
+ && TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
+ ret |= visit_addr (stmt,
+ TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
+ 0), data);
+ }
lhs = gimple_assign_lhs (stmt);
if (TREE_CODE (lhs) == TARGET_MEM_REF
&& TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)