On Sat, May 6, 2017 at 8:45 PM, James McCoy <[email protected]> wrote: > On Fri, May 05, 2017 at 10:23:49PM +0200, Bram Moolenaar wrote: >> James McCoy wrote: >> > It would be nice for there to be defined behavior here for the user, >> > instead of exposing them to the whims of the compiler implementation. >> >> Unfortunately, that is quite difficult. I propose the compiler standard >> gets fixed. This means only the few compilers that exist need to take >> care of this, instead of the millions of C programs. > > Since that's unlikely to happen, how about fixing it in one editor > instead of passing it off to all the Vim users? >
I'm willing to help implement it. Unfortunately, the most straightforward solution, using `-ftrapv` and catching the resulting SIGABRT when overflow occurs, suffers from a bug in GCC dating from '08: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35412. `-ftrapv` does seem to work in the current release of Cygwin, but did not work last I tried it on Linux. A possible workaround is the combination of `-fsanitize=undefined`, `-fsanitize=signed-integer-overflow`, and `-fsanitize-undefined-trap-on-error`. The last flag given does not seem to be documented. When it is used to compile a test program under Cygwin and that program executed I receive an illegal instruction core dump. I have yet to test it on a GNU/Linux toolchain. ``` #include <signal.h> #include <stdio.h> #include <limits.h> void handler(int signum) { printf("Overflow detected.\n"); } int main(int argc, char *argv[]) { int i = INT_MAX; signal(SIGABRT, &handler); i++; return 0; } ``` `gcc -ftrapv` `gcc --fsanitize=undefined -fsanitize=signed-integer-overflow -fsanitize-undefined-trap-on-error` -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
