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.

Reply via email to