OK. I agree with your original patch.
Could you commit it.

Thanks. Dmitry.

> -----Original Message-----
> From: Wez Furlong [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, November 08, 2007 12:03 PM
> To: Dmitry Stogov
> Cc: internals@lists.php.net
> Subject: Re: [PHP-DEV] zend.h breaks system headers on OSX in PHP 5.3
> 
> 
> If I instead apply the following patch to zend.h:
> 
> Index: zend.h 
> ===================================================================
> RCS file: /repository/ZendEngine2/zend.h,v
> retrieving revision 1.293.2.11.2.9.2.9
> diff -u -p -r1.293.2.11.2.9.2.9 zend.h
> --- zend.h    2 Nov 2007 19:40:37 -0000       1.293.2.11.2.9.2.9
> +++ zend.h    8 Nov 2007 09:00:25 -0000
> @@ -331,6 +331,10 @@ struct _zval_struct {
>   #define always_inline inline
>   #endif
> 
> +static __attribute__((always_inline)) int example(void) {
> +     return 0;
> +}
> +
>   static always_inline zend_uint zval_refcount_p(zval* pz) {
>       return pz->refcount__gc;
>   }
> 
> 
> I get this error when compiling PHP:
> 
> /bin/sh /Users/wez/code/php/php5.3/libtool --silent --preserve-dup- 
> deps --mode=compile /opt/local/bin/ccache cc  -Iext/standard/ 
> -I/Users/ 
> wez/code/php/php5.3/ext/standard/ -DPHP_ATOM_INC 
> -I/Users/wez/code/php/ 
> php5.3/include -I/Users/wez/code/php/php5.3/main 
> -I/Users/wez/code/php/ 
> php5.3 -I/Users/wez/code/php/php5.3/ext/ereg/regex -I/usr/include/ 
> libxml2 -I/Users/wez/code/php/php5.3/ext/date/lib -I/Users/wez/code/ 
> php/php5.3/TSRM -I/Users/wez/code/php/php5.3/Zend  
> -no-cpp-precomp  -I/ 
> usr/include -g -O2  -c 
> /Users/wez/code/php/php5.3/ext/standard/info.c - 
> o ext/standard/info.lo
> In file included from /Users/wez/code/php/php5.3/main/php.h:35,
>                   from 
> /Users/wez/code/php/php5.3/ext/standard/info.c: 
> 24:
> /Users/wez/code/php/php5.3/Zend/zend.h:334: error: syntax 
> error before  
> '__attribute__'
> /Users/wez/code/php/php5.3/Zend/zend.h:334: error: syntax 
> error before  
> ')' token
> make: *** [ext/standard/info.lo] Error 1
> 
> If I move the example function above the problematic define, the  
> compile error goes away.  In other words, that define is 
> breaking the  
> always_inline attribute by redefining it.
> 
> My compiler:
> 
> % gcc -v
> Using built-in specs.
> Target: i686-apple-darwin9
> Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable- 
> checking -enable-werror --prefix=/usr --mandir=/share/man --enable- 
> languages=c,objc,c++,obj-c++ 
> --program-transform-name=/^[cg][^.-]*$/s/ 
> $/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 
> --with-slibdir=/usr/ 
> lib --build=i686-apple-darwin9 --with-arch=apple 
> --with-tune=generic -- 
> host=i686-apple-darwin9 --target=i686-apple-darwin9
> Thread model: posix
> gcc version 4.0.1 (Apple Inc. build 5465)
> 
> --Wez
> 
> On Nov 8, 2007, at 3:11 AM, Dmitry Stogov wrote:
> 
> > Hi Wez,
> >
> > Could you please give me more info about the issue.
> > What is your GCC version?
> > Does it related to GCC version?
> > What error do you have?
> > Is this problem described somewhere?
> >
> > Thanks. Dmitry.
> >
> >
> >> -----Original Message-----
> >> From: Wez Furlong [mailto:[EMAIL PROTECTED]
> >> Sent: Wednesday, November 07, 2007 6:00 PM
> >> To: Dmitry Stogov
> >> Cc: internals@lists.php.net
> >> Subject: Re: [PHP-DEV] zend.h breaks system headers on OSX 
> in PHP 5.3
> >>
> >>
> >> This is not an OSX specific issue, it's a symbol leakage 
> issue that 
> >> can break potentially any library that uses that feature 
> of gcc.  I 
> >> just happened to notice it on OSX.
> >>
> >> Better to rename our symbols to avoid conflict.
> >>
> >> --Wez.
> >>
> >> On Nov 7, 2007, at 2:48 AM, Dmitry Stogov wrote:
> >>
> >>> May be it is better to just define always_inline as 
> inline on OSX. 
> >>> Something like:
> >>>
> >>> #if defined(__GNUC__) && !defined(OSX)
> >>> ...
> >>>
> >>> Thanks. Dmitry.
> >>>
> >>>> -----Original Message-----
> >>>> From: Wez Furlong [mailto:[EMAIL PROTECTED]
> >>>> Sent: Wednesday, November 07, 2007 7:43 AM
> >>>> To: internals@lists.php.net
> >>>> Subject: [PHP-DEV] zend.h breaks system headers on OSX in PHP 5.3
> >>>>
> >>>>
> >>>> The system headers on OSX use __attribute__((always_inline)) and 
> >>>> zend.h defines always_inline to something else, breaking 
> the build 
> >>>> when the compiler tries to resolve that attribute name.
> >>>>
> >>>> A solution is to prefix the defines used in the engine
> >> with zend or
> >>>> ZEND or other similar namespacing token, which I thought was our 
> >>>> standard practice, considering everything else in there
> >> has a prefix.
> >>>>
> >>>> If there have been other similar changes elsewhere, they
> >> should also
> >>>> be fixed
> >>>>
> >>>> --Wez.
> >>>>
> >>>> Index: zend.h 
> >>>> 
> ===================================================================
> >>>> RCS file: /repository/ZendEngine2/zend.h,v
> >>>> retrieving revision 1.293.2.11.2.9.2.9
> >>>> diff -u -p -r1.293.2.11.2.9.2.9 zend.h
> >>>> --- zend.h       2 Nov 2007 19:40:37 -0000       
> 1.293.2.11.2.9.2.9
> >>>> +++ zend.h       7 Nov 2007 04:36:01 -0000
> >>>> @@ -324,42 +324,42 @@ struct _zval_struct {
> >>>> #define Z_SET_ISREF_TO(z, isref) Z_SET_ISREF_TO_P(&(z), isref)
> >>>>
> >>>> #if defined(__GNUC__)
> >>>> -#define always_inline inline __attribute__((always_inline))
> >>>> +#define zend_always_inline inline __attribute__((always_inline))
> >>>> #elif defined(_MSC_VER)
> >>>> -#define always_inline __forceinline
> >>>> +#define zend_always_inline __forceinline
> >>>> #else
> >>>> -#define always_inline inline
> >>>> +#define zend_always_inline inline
> >>>> #endif
> >>>>
> >>>> -static always_inline zend_uint zval_refcount_p(zval* pz) {
> >>>> +static zend_always_inline zend_uint zval_refcount_p(zval* pz) {
> >>>>  return pz->refcount__gc;
> >>>> }
> >>>>
> >>>> -static always_inline zend_uint zval_set_refcount_p(zval* pz, 
> >>>> zend_uint rc) {
> >>>> +static zend_always_inline zend_uint 
> zval_set_refcount_p(zval* pz,
> >>>> zend_uint rc) {
> >>>>  return pz->refcount__gc = rc;
> >>>> }
> >>>>
> >>>> -static always_inline zend_uint zval_addref_p(zval* pz) {
> >>>> +static zend_always_inline zend_uint zval_addref_p(zval* pz) {
> >>>>  return ++pz->refcount__gc;
> >>>> }
> >>>>
> >>>> -static always_inline zend_uint zval_delref_p(zval* pz) {
> >>>> +static zend_always_inline zend_uint zval_delref_p(zval* pz) {
> >>>>  return --pz->refcount__gc;
> >>>> }
> >>>>
> >>>> -static always_inline zend_bool zval_isref_p(zval* pz) {
> >>>> +static zend_always_inline zend_bool zval_isref_p(zval* pz) {
> >>>>  return pz->is_ref__gc;
> >>>> }
> >>>>
> >>>> -static always_inline zend_bool zval_set_isref_p(zval* pz) {
> >>>> +static zend_always_inline zend_bool zval_set_isref_p(zval* pz) {
> >>>>  return pz->is_ref__gc = 1;
> >>>> }
> >>>>
> >>>> -static always_inline zend_bool zval_unset_isref_p(zval* pz) {
> >>>> +static zend_always_inline zend_bool 
> zval_unset_isref_p(zval* pz) {
> >>>>  return pz->is_ref__gc = 0;
> >>>> }
> >>>>
> >>>> -static always_inline zend_bool zval_set_isref_to_p(zval* pz, 
> >>>> zend_bool isref) {
> >>>> +static zend_always_inline zend_bool 
> zval_set_isref_to_p(zval* pz,
> >>>> zend_bool isref) {
> >>>>  return pz->is_ref__gc = isref;
> >>>> }
> >>>>
> >>>> --
> >>>> PHP Internals - PHP Runtime Development Mailing List
> >>>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>>>
> >>>
> >>
> >> --
> >> PHP Internals - PHP Runtime Development Mailing List
> >> To unsubscribe, visit: http://www.php.net/unsub.php
> >>
> >
> 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to