https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100499
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |law at gcc dot gnu.org --- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- But there's still int multiple_of_p (tree type, const_tree top, const_tree bottom) { ... case NOP_EXPR: /* Can't handle conversions from non-integral or wider integral type. */ if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE) || (TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0))))) return 0; /* fall through */ case SAVE_EXPR: return multiple_of_p (type, TREE_OPERAND (top, 0), bottom); which makes guards like || (TYPE_OVERFLOW_UNDEFINED (type) && multiple_of_p (type, c, s))) break for say multiple_of_p (int, (int)(unsigned)(x*s), s). So it's a bit fishy in the end ... :/ Jeff originally introduced multiple_of_p, maybe he remembers something.