https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109735
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- We have a sign mismatch here from vectorizing a POINTER_MINUS_EXPR. (gdb) p debug ((slp_tree)0x39c2970) pr83329.c:11:6: note: node 0x39c2970 (max_nunits=1, refcnt=1) vector(1) int pr83329.c:11:6: note: op template: _2 = &g - &f; pr83329.c:11:6: note: stmt 0 _2 = &g - &f; pr83329.c:11:6: note: stmt 1 _3 = &e - &f; pr83329.c:11:6: note: children 0x39c2a00 0x39c2a90 but (gdb) p debug_gimple_stmt (0x7ffff6fc3dc0) _24 = VIEW_CONVERT_EXPR<vector(1) unsigned int>(_23); there's code to handle this but it's conditional on a special case. The fix is to invoke it generally I think.