Hi,
in 5.4 and trunk, there is compilation warnings all pointing to
STD_PHP_INI_ENTRY
/home/fat/dev/php-src/trunk/sapi/fpm/fpm/fpm_main.c:1465:109: warning:
cast from pointer to integer of different size
/home/fat/dev/php-src/trunk/sapi/fpm/fpm/fpm_main.c:1466:85: warning:
cast from pointer to integer of different size
the warnings appear in sapis (cgi, fpm, ...) and extensions (standard,
...) and the problem comes from the XOffsetOf macro which is expanded
to offsetof defined in Zend/zend_operators.h whit the following code
added in revisions 311662 and 312264:
#ifndef offsetof
#define offsetof(t,f)
((int)(&((t*)0)->f))
#endif
Before this addition, XOffsetOf was expanded to
((long) (((char ) (&(((t)((void *)0))->f))) - ((char *) ((void *)0))))
which is defined at the end of main/php.h.
Two questions:
1- is this possible to change Zend/zend_operators.h to use the old
macros ? (short term solution)
2- Why not using the build-in POSIX offsetof (man offsetof) when
available ? (long term solution)
thx
++ jerome
PS: i'm compiling on 64 bits linux
the warnings appear in sapis (cgi, fpm, ...) and extensions (standard,
...) and the problem comes from the XOffsetOf macro which is expanded
to offsetof defined in Zend/zend_operators.h whit the following code
added in revisions 311662 and 312264:#ifndef offsetof
#define offsetof(t,f)
((int)(&((t*)0)->f))
#endif
Yes, the cast should be changed to (size_t)(uintptr_t).
I have also hit this problem a month ago. At the time I think I commented
on IRC using (int)(intptr_t) instead could avoid problems like in "if
(offsetof(x) - 5 < 0)", but since the C standard calls for a «expand[ing]
to an integer constant expression that has type size_t»,
(size_t)(uintptr_t) seems preferable.
--
Gustavo Lopes
Hi,
2011/7/2 Jérôme Loyet jerome@loyet.net:
Hi,
in 5.4 and trunk, there is compilation warnings all pointing to
STD_PHP_INI_ENTRY/home/fat/dev/php-src/trunk/sapi/fpm/fpm/fpm_main.c:1465:109: warning:
cast from pointer to integer of different size
/home/fat/dev/php-src/trunk/sapi/fpm/fpm/fpm_main.c:1466:85: warning:
cast from pointer to integer of different sizethe warnings appear in sapis (cgi, fpm, ...) and extensions (standard,
...) and the problem comes from the XOffsetOf macro which is expanded
to offsetof defined in Zend/zend_operators.h whit the following code
added in revisions 311662 and 312264:#ifndef offsetof
#define offsetof(t,f)
((int)(&((t*)0)->f))
#endifBefore this addition, XOffsetOf was expanded to
((long) (((char ) (&(((t)((void *)0))->f))) - ((char *) ((void *)0))))which is defined at the end of main/php.h.
Two questions:
1- is this possible to change Zend/zend_operators.h to use the old
macros ? (short term solution)
I've removed this offsetof definition introduced in r311662, it seems
have been added accidentaly, as the code in this revision do not use
it.
--
Regards,
Felipe Pena