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.