https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118976

--- Comment #14 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to avieira from comment #13)

> 
> the VECTOR_CST just goes over the elements in the VECTOR_CST and calls this
> recursively, making the change:
> --- a/gcc/fold-const.cc
> +++ b/gcc/fold-const.cc
> @@ -1964,7 +1964,7 @@ const_unop (enum tree_code code, tree type, tree arg0)
>        if (TREE_CODE (arg0) == INTEGER_CST)
>         return fold_not_const (arg0, type);
>        else if (POLY_INT_CST_P (arg0))
> -       return wide_int_to_tree (type, -poly_int_cst_value (arg0));
> +       return wide_int_to_tree (type, ~poly_int_cst_value (arg0));
>        /* Perform BIT_NOT_EXPR on each element individually.  */
>        else if (TREE_CODE (arg0) == VECTOR_CST)
>         {
> 
> fixes it for me.
> 
> I'm going on holidays tomorrow, so I'll leave this for someone with a bit
> more time to pick up. Richard S it seems to have been your change in:
> https://gcc.gnu.org/git/?p=gcc.git;a=commit;
> h=36fd64086542ed734aded849304723218fa4d6fd so I'll wait for others to
> confirm my thinking here, I always get nervous around bit fiddling ;)

Yes that does look like the fix and it looks like obvious and looks like it was
just a typo.

Though I wonder if we could change fold_not_const to handle it instead. But
other than that looks correct.

Reply via email to