From e11e491dbfa0d4b134e653647a0bf1b645e17327 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 5 Jul 2007 21:21:10 +0000 Subject: re PR middle-end/32639 (ptrmem1.C now ICE's on mainline) 2007-07-05 Richard Guenther PR middle-end/32639 * alias.c (get_alias_set): Tread METHOD_TYPE the same as FUNCTION_TYPE. * tree-ssa.c (useless_type_conversion_p): Check canonical types early. From-SVN: r126389 --- gcc/ChangeLog | 8 ++++++++ gcc/alias.c | 3 ++- gcc/tree-ssa.c | 10 +++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f661697..5a55a9c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-07-05 Richard Guenther + + PR middle-end/32639 + * alias.c (get_alias_set): Tread METHOD_TYPE the same as + FUNCTION_TYPE. + * tree-ssa.c (useless_type_conversion_p): Check canonical + types early. + 2007-07-05 Anatoly Sokolov * config/avr/avr.md (zero_extendqihi2, zero_extendqisi2, diff --git a/gcc/alias.c b/gcc/alias.c index 7c258c7..a47e291 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -620,7 +620,8 @@ get_alias_set (tree t) /* There are no objects of FUNCTION_TYPE, so there's no point in using up an alias set for them. (There are, of course, pointers and references to functions, but that's different.) */ - else if (TREE_CODE (t) == FUNCTION_TYPE) + else if (TREE_CODE (t) == FUNCTION_TYPE + || TREE_CODE (t) == METHOD_TYPE) set = 0; /* Unless the language specifies otherwise, let vector types alias diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 005d3fd..5e16652 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -920,6 +920,11 @@ useless_type_conversion_p (tree outer_type, tree inner_type) if (inner_type == outer_type) return true; + /* If we know the canonical types, compare them. */ + if (TYPE_CANONICAL (inner_type) + && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type)) + return true; + /* Changes in machine mode are never useless conversions. */ if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type)) return false; @@ -1029,11 +1034,6 @@ useless_type_conversion_p (tree outer_type, tree inner_type) if (TREE_CODE (inner_type) != TREE_CODE (outer_type)) return false; - /* If we know the canonical types, compare them. */ - if (TYPE_CANONICAL (inner_type) - && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type)) - return true; - /* ??? Add structural equivalence check. */ /* ??? This should eventually just return false. */ -- cgit v1.1