https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84873
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Why the + if (TREE_CODE (*op1_p) == INTEGER_CST) + *op1_p = fold_convert (unsigned_type_node, *op1_p); + else + *op1_p = build1 (NOP_EXPR, unsigned_type_node, *op1_p); ? Just change the convert to fold_convert... I hope the FE ensures that the shift count has a sane type (some integral one).