aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-17 11:16:24 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-17 11:16:24 +0000
commit7faf1979bf7d7aa6353ee061f94ec81ef14384db (patch)
tree9eb8867a840351a7283be605bf4a6970572e0c31
parent5d26658320ed0f76bbd7c3fd34b08fd0275b0a41 (diff)
* ipa-type-escape.c (look_for_casts): Revamp using handled_component_p.redhat/trunk-java-premerge-20070117
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120849 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/ipa-type-escape.c35
2 files changed, 19 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d87295de3e6..4045c4b16b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2007-01-17 Jan Hubicka <jh@suse.cz>
+
+ * ipa-type-escape.c (look_for_casts): Revamp using handled_component_p.
+
2007-01-17 Eric Christopher <echristo@apple.com>
* config.gcc: Support core2 processor.
diff --git a/gcc/ipa-type-escape.c b/gcc/ipa-type-escape.c
index 7b2fac104bc..ccb60109ee0 100644
--- a/gcc/ipa-type-escape.c
+++ b/gcc/ipa-type-escape.c
@@ -920,26 +920,21 @@ look_for_casts (tree lhs __attribute__((unused)), tree t)
tree castfromvar = TREE_OPERAND (t, 0);
check_cast (TREE_TYPE (t), castfromvar);
}
- else if (TREE_CODE (t) == COMPONENT_REF
- || TREE_CODE (t) == INDIRECT_REF
- || TREE_CODE (t) == BIT_FIELD_REF)
- {
- tree base = get_base_address (t);
- while (t != base)
- {
- t = TREE_OPERAND (t, 0);
- if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
- {
- /* This may be some part of a component ref.
- IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
- castfromref will give you a.b.c, not a. */
- tree castfromref = TREE_OPERAND (t, 0);
- check_cast (TREE_TYPE (t), castfromref);
- }
- else if (TREE_CODE (t) == COMPONENT_REF)
- get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
- }
- }
+ else
+ while (handled_component_p (t))
+ {
+ t = TREE_OPERAND (t, 0);
+ if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
+ {
+ /* This may be some part of a component ref.
+ IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
+ castfromref will give you a.b.c, not a. */
+ tree castfromref = TREE_OPERAND (t, 0);
+ check_cast (TREE_TYPE (t), castfromref);
+ }
+ else if (TREE_CODE (t) == COMPONENT_REF)
+ get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
+ }
}
/* Check to see if T is a read or address of operation on a static var