aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-object-size.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-07-29 11:44:09 +0000
committerJakub Jelinek <jakub@redhat.com>2009-07-29 11:44:09 +0000
commitaa267a453af67fed68cdcbc1a893ea1ddd071657 (patch)
tree682c32a53b5a0711af8d6c763162d9d8957d098b /gcc/tree-object-size.c
parente66916ac4702dd1e1c6a24475cdfc3470532ee02 (diff)
svn merge -r150069:150068 svn+ssh://gcc.gnu.org/svn/gcc/trunk
svn merge -r150015:150014 svn+ssh://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_4-branch svn merge -r149860:149859 svn+ssh://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_4-branch svn merge -r149391:149390 svn+ssh://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_4-branch svn merge -r149235:149234 svn+ssh://gcc.gnu.org/svn/gcc/trunk svn merge -r149158:149157 svn+ssh://gcc.gnu.org/svn/gcc/trunk svn merge -r149150:149149 svn+ssh://gcc.gnu.org/svn/gcc/trunk git-svn-id: https://gcc.gnu.org/svn/gcc/branches/redhat/fc11-4_4-branch@150208 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-object-size.c')
-rw-r--r--gcc/tree-object-size.c30
1 files changed, 11 insertions, 19 deletions
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index a54fa06893f..981236dc6da 100644
--- a/gcc/tree-object-size.c
+++ b/gcc/tree-object-size.c
@@ -216,7 +216,7 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
&& TREE_CODE (var) != IMAGPART_EXPR)
var = TREE_OPERAND (var, 0);
if (var != pt_var && TREE_CODE (var) == ARRAY_REF)
- var = TREE_OPERAND (var, 0);
+ var = TREE_OPERAND (var, 0);
if (! TYPE_SIZE_UNIT (TREE_TYPE (var))
|| ! host_integerp (TYPE_SIZE_UNIT (TREE_TYPE (var)), 1)
|| (pt_var_size
@@ -261,17 +261,8 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
v = NULL_TREE;
break;
}
- while (v != pt_var && TREE_CODE (v) == COMPONENT_REF)
- if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
- != UNION_TYPE
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
- != QUAL_UNION_TYPE)
- break;
- else
- v = TREE_OPERAND (v, 0);
- if (TREE_CODE (v) == COMPONENT_REF
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
- == RECORD_TYPE)
+ if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
+ == RECORD_TYPE)
{
tree fld_chain = TREE_CHAIN (TREE_OPERAND (v, 1));
for (; fld_chain; fld_chain = TREE_CHAIN (fld_chain))
@@ -283,17 +274,18 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
v = NULL_TREE;
break;
}
- v = TREE_OPERAND (v, 0);
}
- while (v != pt_var && TREE_CODE (v) == COMPONENT_REF)
- if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
- != UNION_TYPE
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
- != QUAL_UNION_TYPE)
+
+ if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
+ == RECORD_TYPE)
+ v = TREE_OPERAND (v, 0);
+ while (v && v != pt_var && TREE_CODE (v) == COMPONENT_REF)
+ if (TREE_CODE (TREE_TYPE (v)) != UNION_TYPE
+ && TREE_CODE (TREE_TYPE (v)) != QUAL_UNION_TYPE)
break;
else
v = TREE_OPERAND (v, 0);
- if (v != pt_var)
+ if (v && v != pt_var)
v = NULL_TREE;
else
v = pt_var;