当我在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);
构建完成但是有什么需要关注此警告吗?
答案 0 :(得分:0)
这是一个错误,应该修复,但在这种情况下,它似乎无害。
查看the code,我们看到一个指针(38个整数的数组)从bailout
复制到一个名为original_bailout
的临时变量(指向37个整数的数组)。不对该临时变量执行任何操作,并且指针下方的几行被复制回原始变量bailout
。 original_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);