re PR middle-end/32639 (ptrmem1.C now ICE's on mainline)

2007-07-05  Richard Guenther  <rguenther@suse.de>

	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
This commit is contained in:
Richard Guenther 2007-07-05 21:21:10 +00:00 committed by Richard Biener
parent f6cdc43257
commit e11e491dbf
3 changed files with 15 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2007-07-05 Richard Guenther <rguenther@suse.de>
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 <aesok@post.ru>
* config/avr/avr.md (zero_extendqihi2, zero_extendqisi2,

View File

@ -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

View File

@ -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. */