You could always say that wrap-around has to either (a) cause SIGILL or (b) return the wrapped-around result. That still allows linting with a sanitizer without involving any UB at all.
This is effectively what Rust does (replace "SIGILL" by "panic").
This is effectively what Rust does (replace "SIGILL" by "panic").