https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119731
--- Comment #14 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Just a quick update. It looks like undefined code in the verifier producing a verification error. scalar32_min_max_arsh does: u64 umin_val = src_reg->u32_min_value; /* Upon reaching here, src_known is true and * umax_val is equal to umin_val. */ dst_reg->s32_min_value = (u32)(((s32)dst_reg->s32_min_value) >> umin_val); dst_reg->s32_max_value = (u32)(((s32)dst_reg->s32_max_value) >> umin_val); Where umin_val would be 32 which has undefined behavior in it. Once someone has filed/provided a fix for the verifier in the linux kernel this bug should be closed as moved.