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.

Raspunde prin e-mail lui