On Fri, Jan 13, 2012 at 12:09 AM, DJ Delorie <d...@redhat.com> wrote: > > Another case where one address space may support multiple pointer > sizes, so conversions between such must be preserved. > > * tree-ssa.c (useless_type_conversion_p): Conversions between > different-sized pointers aren't useless. > > Index: tree-ssa.c > =================================================================== > --- tree-ssa.c (revision 183139) > +++ tree-ssa.c (working copy) > @@ -1192,12 +1192,17 @@ bool > useless_type_conversion_p (tree outer_type, tree inner_type) > { > /* Do the following before stripping toplevel qualifiers. */ > if (POINTER_TYPE_P (inner_type) > && POINTER_TYPE_P (outer_type)) > { > + /* Do not lose casts between pointers of different precision. */ > + if (TYPE_PRECISION (outer_type) > + != TYPE_PRECISION (inner_type)) > + return false; > + > /* Do not lose casts between pointers to different address spaces. */ > if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) > != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))) > return false; > > /* If the outer type is (void *), the conversion is not necessary. */
That should not be necessary as there is a mode check below. Do you hit the issue only when the VOID_TYPE_P check is true? In that case simply delete it - it has become obsolete. Richard.