Ответ 1
Похоже, что поддержка -ftrapv
в GCC несколько сломана, у них есть открытая ошибка Bug-35412 в их Bugzilla с 2008 года кажется, чтобы покрыть его.
Я компилирую код ниже как
$ gcc -Wall -ftrapv test.c
Однако выполнение сгенерированного исполняемого файла всегда печатает-2147483648, что не то, что я ожидал. Я запускаю gcc версии 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5).
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <limits.h>
4 #include <signal.h>
5
6 void h(int signal)
7 {
8 printf("caught signal exiting\n");
9 exit(1);
10 }
11
12 int main(void)
13 {
14 int x = INT_MAX;
15 int y;
16
17 signal(SIGABRT,h);
18 y = x+1;
19 printf("%d\n",y);
20 return 0;
21 }
Добавлено позже: компиляция с clang и смена SIGABRT на SIGILL работает, но пока не удача с gcc.
Похоже, что поддержка -ftrapv
в GCC несколько сломана, у них есть открытая ошибка Bug-35412 в их Bugzilla с 2008 года кажется, чтобы покрыть его.