Mac xdebug发出警告:初始化'jmp_buf *'的不兼容指针类型(又名'int(*)[37]')

时间:2015-04-20 15:45:12

标签: macos makefile xdebug

当我在Mac上的xdebug上运行make时,我得到了这个(OS X 10.10.2):

xdebug_handler_dbgp.c:900:21: warning: 
  incompatible pointer types initializing 'jmp_buf *' (aka 'int (*)[37]')
  with an expression of type 'sigjmp_buf *' (aka 'int (*)[38]')
  [-Wincompatible-pointer-types]
    jmp_buf           *original_bailout = EG(bailout);

构建完成但是有什么需要关注此警告吗?

1 个答案:

答案 0 :(得分:0)

这是一个错误,应该修复,但在这种情况下,它似乎无害。

查看the code,我们看到一个指针(38个整数的数组)从bailout复制到一个名为original_bailout的临时变量(指向37个整数的数组)。不对该临时变量执行任何操作,并且指针下方的几行被复制回原始变量bailoutoriginal_bailout已不再使用。

由于无法通过不兼容的original_bailout变量访问数组,因此我认为没有任何腐败风险。

修复方法可能是在jmp_buf中定义的JMP_BUF宏替换Zend/zend.h类型:

#ifdef HAVE_SIGSETJMP
#       define SETJMP(a) sigsetjmp(a, 0)
#       define LONGJMP(a,b) siglongjmp(a, b)
#       define JMP_BUF sigjmp_buf
#else
#       define SETJMP(a) setjmp(a)
#       define LONGJMP(a,b) longjmp(a, b)
#       define JMP_BUF jmp_buf
#endif

因此900行显示:

JMP_BUF          *original_bailout = EG(bailout);