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.

Reply via email to