Bug #64197 [Ver]: _Offsetof() macro used but not defined on ARM/Clang
| From: | mats at exmandato dot se | Date: | Wed, 13 Feb 2013 12:18:52 +0000 |
| Subject: | Bug #64197 [Ver]: _Offsetof() macro used but not defined on ARM/Clang | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-176598@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64197&edit=1
ID: 64197
User updated by: mats at exmandato dot se
Reported by: mats at exmandato dot se
Summary: _Offsetof() macro used but not defined on ARM/Clang
Status: Verified
Type: Bug
Package: Compile Failure
Operating System: FreeBSD10 / ARM
PHP Version: 5.4.11
Block user comment: N
Private report: N
New Comment:
> Could you set the the following #define *before* the
> #ifndef XtOffsetOf in Zend/zend_ini,h:30
> #define XtOffsetOf __builtin_offsetof
Adding #define XtOffsetOf __builtin_offsetof in the file Zend/zend_ini.h solved the problem.
> Note that rooting out these kinds of bugs is typical for porting to a new
> architecture, so filing bugs against a stable version is not really
> appropriate.
I'm sorry, I didn't know that
Previous Comments:
------------------------------------------------------------------------
[2013-02-13 11:32:18] ardbiesheuvel@php.net
The preprocessor conditionals in Zend/zend_ini.h test for '__arm' to decide whether
_Offsetof() is defined. The assumption is that this define is only set by ARMCC, the proprietary ARM
compiler, and not by others (like GCC). However, as Clang does set this define as well (in addition
to '__arm__'), the generated code ends up using a macro that is not defined, resulting in
the output as reported.
Note that rooting out these kinds of bugs is typical for porting to a new architecture, so filing
bugs against a stable version is not really appropriate.
------------------------------------------------------------------------
[2013-02-13 07:29:22] ardbiesheuvel@php.net
It appears that this code is performing some tests to decide whether the CRAY or ARM proprietary
compilers are being used, and this is giving bad results on FreeBSD/ARM.
Could you set the the following #define *before* the #ifndef XtOffsetOf in Zend/zend_ini,h:30
#define XtOffsetOf __builtin_offsetof
and try again?
------------------------------------------------------------------------
[2013-02-12 19:35:24] ardbiesheuvel@php.net
This has nothing to do with ARM.
Looking at the log, it appears that LLVM/Clang does not understand _Offsetof, and
treats it as an implicit function declaration and not a macro. Passing type names
to functions is not supported in C so it complains that it expects an expression
instead.
------------------------------------------------------------------------
[2013-02-12 17:53:55] sixd@php.net
It could be interesting to try a snapshot of trunk from http://snaps.php.net/,
since some ARM fixes have recently been merged there,
------------------------------------------------------------------------
[2013-02-12 15:42:53] mats at exmandato dot se
Description:
------------
===> Building for php5-5.4.11
/bin/sh /usr/ports/lang/php5/work/php-5.4.11/libtool --silent --preserve-dup-deps --mode=compile
clang -Iext/date/lib -Iext/date/ -I/usr/ports/lang/php5/work/php-5.4.11/ext/date/ -DPHP_ATOM_INC
-I/usr/ports/lang/php5/work/php-5.4.11/include -I/usr/ports/lang/php5/work/php-5.4.11/main
-I/usr/ports/lang/php5/work/php-5.4.11 -I/usr/ports/lang/php5/work/php-5.4.11/ext/date/lib
-I/usr/ports/lang/php5/work/php-5.4.11/ext/ereg/regex -I/usr/local/include/libxml2
-I/usr/local/include -I/usr/ports/lang/php5/work/php-5.4.11/TSRM
-I/usr/ports/lang/php5/work/php-5.4.11/Zend -O2 -mno-global-merge -mno-load-store-multiple
-fno-strict-aliasing -pipe -march=armv6z -mtune=arm1176jzf-s -mfloat-abi=soft -c
/usr/ports/lang/php5/work/php-5.4.11/ext/date/php_date.c -o ext/date/php_date.lo
/usr/ports/lang/php5/work/php-5.4.11/ext/date/php_date.c:500:2: warning: implicit declaration of
function '_Offsetof' is invalid in C99 [-Wimplicit-function-declaration]
STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdateString,
default_timezone, zend_date_globals, date_globals)
^
/usr/ports/lang/php5/work/php-5.4.11/main/php_ini.h:67:28: note: expanded from macro
'STD_PHP_INI_ENTRY'
#define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:150:71: note: expanded from macro
'STD_ZEND_INI_ENTRY'
ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:55:36: note: expanded from macro
'XtOffsetOf'
# define XtOffsetOf(s_type, field) XtOffset(s_type*, field)
^
note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:127:65: note: expanded from macro
'ZEND_INI_ENTRY2'
ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:124:65: note: expanded from macro
'ZEND_INI_ENTRY2_EX'
ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:118:50: note: expanded from macro
'ZEND_INI_ENTRY3_EX'
{ 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value,
sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
^
/usr/ports/lang/php5/work/php-5.4.11/ext/date/php_date.c:500:88: error: unexpected type name
'zend_date_globals': expected expression
STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdateString,
default_timezone, zend_date_globals, date_globals)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:150:82: note: expanded from macro
'STD_ZEND_INI_ENTRY'
ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:55:45: note: expanded from macro
'XtOffsetOf'
# define XtOffsetOf(s_type, field) XtOffset(s_type*, field)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:33:44: note: expanded from macro
'XtOffset'
# define XtOffset(p_type, field) _Offsetof(p_type, field)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:127:65: note: expanded from macro
'ZEND_INI_ENTRY2'
ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:124:65: note: expanded from macro
'ZEND_INI_ENTRY2_EX'
ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:118:50: note: expanded from macro
'ZEND_INI_ENTRY3_EX'
{ 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value,
sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
^
/usr/ports/lang/php5/work/php-5.4.11/ext/date/php_date.c:500:2: error: expected expression
STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdateString,
default_timezone, zend_date_globals, date_globals)
^
/usr/ports/lang/php5/work/php-5.4.11/main/php_ini.h:67:28: note: expanded from macro
'STD_PHP_INI_ENTRY'
#define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:150:71: note: expanded from macro
'STD_ZEND_INI_ENTRY'
ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:55:36: note: expanded from macro
'XtOffsetOf'
# define XtOffsetOf(s_type, field) XtOffset(s_type*, field)
^
note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:127:65: note: expanded from macro
'ZEND_INI_ENTRY2'
ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:124:65: note: expanded from macro
'ZEND_INI_ENTRY2_EX'
ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)
^
/usr/ports/lang/php5/work/php-5.4.11/Zend/zend_ini.h:118:50: note: expanded from macro
'ZEND_INI_ENTRY3_EX'
{ 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value,
sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
^
1 warning and 2 errors generated.
*** [ext/date/php_date.lo] Error code 1
1 error
*** [do-build] Error code 1
Stop in /usr/ports/lang/php5.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64197&edit=1