https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112949
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- defining __builtin_clz makes this code undefined. Especially when it comes to calling itself. That is the ranges here are ok and correct but rather the usage is undefined. gcc.dg/pr100521.c is just testing to make sure we don't ICE rather than anything else. Likewise for gcc.dg/pr100790.c .