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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|middle-end                  |c

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
                /* Expand:
                   __builtin_stdc_rotate_left (arg1, arg2) as
                   arg1 r<< (arg2 % prec)
                   __builtin_stdc_rotate_right (arg1, arg2) as
                   arg1 r>> (arg2 % prec).  */
                arg_p = &(*cexpr_list)[1];
                *arg_p = convert_lvalue_to_rvalue (loc, *arg_p, true, true);
                if (!INTEGRAL_TYPE_P (TREE_TYPE (arg_p->value)))
                  {
                    error_at (loc, "%qs operand not an integral type", name);
                    expr.set_error ();
                    break;
                  }
                if (TREE_CODE (TREE_TYPE (arg_p->value)) == ENUMERAL_TYPE)
                  {
                    error_at (loc, "argument %u in call to function "
                                   "%qs has enumerated type", 2, name);
                    expr.set_error ();
                    break;
                  }
                tree arg1 = save_expr (arg);
                tree arg2 = save_expr (arg_p->value);
                tree_code code;
                if (stdc_rid == C_BUILTIN_STDC_ROTATE_LEFT)
                  code = LROTATE_EXPR;
                else
                  code = RROTATE_EXPR;

Yes this is broken.

Reply via email to