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.