On Thu, Jan 30, 2014 at 07:25:03PM +0100, Richard Biener wrote:
> *** 8886,8891 ****
> --- 8892,8932 ----
>         || TREE_ADDRESSABLE (desttype))
>       return NULL_TREE;
>   
> +       /* Make sure we are not copying using a floating-point mode or
> +          a type whose size possibly does not match its precision.  */
> +       if (FLOAT_MODE_P (TYPE_MODE (desttype))
> +       || TREE_CODE (desttype) == BOOLEAN_TYPE
> +       || TREE_CODE (desttype) == ENUMERAL_TYPE)
> +     {
> +       /* A more suitable int_mode_for_mode would return a vector
> +          integer mode for a vector float mode or a integer complex
> +          mode for a float complex mode if there isn't a regular
> +          integer mode covering the mode of desttype.  */
> +       enum machine_mode mode = int_mode_for_mode (TYPE_MODE (desttype));
> +       if (mode == BLKmode)
> +         desttype = NULL_TREE;
> +       else
> +         desttype = build_nonstandard_integer_type (GET_MODE_BITSIZE (mode),
> +                                                    1);
> +     }

As I said in the PR, I think you want to do the build_aligned_type
just in case e.g. the floating point type is more aligned than the integer
or vice versa.

> -     {
> -       tree srcitype
> -         = lang_hooks.types.type_for_mode (TYPE_MODE (srctype),
> -                                           TYPE_UNSIGNED (srctype));
> -       srctype = build_aligned_type (srcitype, TYPE_ALIGN (srctype));
> -     }
> - 

        Jakub

Reply via email to