https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105679
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This is jump threading due to the fsanitize=shift option. With the irq argument to work changed to int from unsigned, the work function is inlined. And then the check: if (irq < 0 || irq >= ELEMENTS) return; works. So I don't know how to solve this really.