如何使gcc ftrapv工作?

如何使gcc ftrapv工作?,c,gcc,C,Gcc,我将下面的代码编译为 $ gcc -Wall -ftrapv test.c 但是,运行生成的可执行文件总是打印-2147483648,这不是我所期望的。我正在运行gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5) 1#包括 2#包括 3#包括 4#包括 5. 6H(内部信号) 7 { 8 printf(“捕捉到的信号退出\n”); 9出口(1); 10 } 11 12内部干管(无效) 13 { 14 int x=int_MAX; 15年; 16 17信号(SIG

我将下面的代码编译为

$ gcc -Wall  -ftrapv test.c
但是,运行生成的可执行文件总是打印-2147483648,这不是我所期望的。我正在运行gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)

1#包括
2#包括
3#包括
4#包括
5.
6H(内部信号)
7 {
8 printf(“捕捉到的信号退出\n”);
9出口(1);
10 }
11
12内部干管(无效)
13 {
14 int x=int_MAX;
15年;
16
17信号(SIGABRT,h);
18y=x+1;
19 printf(“%d\n”,y);
20返回0;
21 }

后来添加:使用clang编译并将SIGABRT更改为SIGILL是可行的,但到目前为止gcc还没有成功。

看起来gcc中的ftrapv支持有些中断,他们从2008年开始在Bugzilla中添加了一个,似乎是为了涵盖它。

我的理解(但我现在在GCC文档中找不到引用,所以这是一条评论而不是答案)是,
-ftrapv
在GCC中不起作用,可能从来没有起过作用。你能将引用添加到bug中吗?谢谢。现在推荐的替代方案是
-fsanize=undefined
-fsanize=有符号整数溢出-例如,fsanize未定义错误陷阱
)。
  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 }