php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #62346 when using vac.C v11 get warning about redefine for __restrict__ in zend.h
Submitted: 2012-06-17 20:09 UTC Modified: 2020-04-16 16:38 UTC
From: mamfelt at gmail dot com Assigned: nikic (profile)
Status: Closed Package: Compile Warning
PHP Version: 5.3.14 and later OS: AIX
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: mamfelt at gmail dot com
New email:
PHP Version: OS:

 

 [2012-06-17 20:09 UTC] mamfelt at gmail dot com
Description:
------------
"/data/prj/php-5.3.14/Zend/zend.h", line 179.10: 1506-358 (I) "__restrict__" is defined on line 186 of /usr/include/standards.h.


Test script:
---------------
export CFLAGS='-O2 -qlangval=extc99'

./configure  --prefix=/opt --sysconfdir=/etc --mandir=/usr/share/man

make

Expected result:
----------------
"/data/prj/php-5.3.14/Zend/zend.h", line 179.10: 1506-358 (I) "__restrict__" is defined on line 186 of /usr/include/standards.h.

but MANY MANY times



Patches

zend.h.diff (last revision 2012-06-17 20:10 UTC by mamfelt at gmail dot com)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-06-17 20:21 UTC] mamfelt at gmail dot com
The patch is "very simple". It gets rid of endless messages. However, I do not know the importance of restrict or __restrict__

The solution may be much different.

The AIX definition from /usr/include/standards.h

is

/*
 * Handle the use of the restrict keyword in non-C99 compilers
 */
#if ((__STDC_VERSION__ >= 199901L) || defined(__C99_RESTRICT))
#define __restrict__ restrict
#else
#define __restrict__
#endif

Note: there are several ways to resolve the issue of the occainsional C++ comments in C code. But experience shows that when C++ comments are being used
c89 is often not enough.

If PHP is meant to be strictly C89 code - I could change the CFLAG to get rid
of the messages - but just because gnu accepts both - with lots of help in zend.h it seems - does not make it better than one or the other.

If PHP is meant to be "c89" rather than "c99" (with extensions) then I need to try with different compiler flags - because langval c99ext is wrong

yes, I know I can add the flag -qcpluscmt instead - but I am told by people who "know" compilers that what we call c++ comments is officially an extension, not a core element.

Thank you for your consideration.
 [2016-03-14 16:52 UTC] mamfelt at gmail dot com
Maybe the code in zend.h is no longer needed. I have tried to find " restrict" or "__restrict" in the .c and .h files.

However, without something, the stderr is flooded with warnings.

To better see what the compiler does I combined -E and -qinfo=all and got this excerpt:

"/usr/include/standards.h", line 172.2: 1506-454 (I) if condition evaluates to 1.
"/usr/include/standards.h", line 173.9: 1506-441 (I) The macro definition will override the keyword "__restrict__".

#line 173
#define __restrict__ restrict

"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 179.10: 1506-441 (I) The macro definition will override the keyword "__restrict__".
"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 179.10: 1506-236 (W) Macro name __restrict__ has been redefined.
"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 179.10: 1506-358 (I) "__restrict__" is defined on line 173 of /usr/include/standards.h.
"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 180.2: 1506-460 (I) endif nesting level is 3.
"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 181.9: 1506-441 (I) The macro definition will override the keyword "restrict".
"/data/prj/php/src/php-5.4.45/Zend/zend.h", line 183.2: 1506-460 (I) if nesting level is 3.

#line 174
# define ZEND_FASTCALL
#line 179
# define __restrict__

#define restrict __restrict__
#line 184
# define ZEND_ALLOCA_MAX_SIZE (32 * 1024)

Maybe after nearly 4 years someone can look at this!
 [2016-06-03 09:30 UTC] mamfelt at gmail dot com
-PHP Version: 5.3.14 +PHP Version: 5.3.14 and later
 [2016-06-03 09:30 UTC] mamfelt at gmail dot com
This is still around - also in PHP-7.

Any comments. This creates a log of noise, perhaps for nothing.

"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 242.10: 1506-236 (W) Macro name __restrict__ has been redefined.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 242.10: 1506-358 (I) "__restrict__" is defined on line 173 of /usr/include/standards.h.

AIX defines as:
  +169  /*
  +170   * Handle the use of the restrict keyword in non-C99 compilers
  +171   */
  +172  #if ((__STDC_VERSION__ >= 199901L) || defined(__C99_RESTRICT))
  +173  #define __restrict__ restrict
  +174  #else
  +175  #define __restrict__
  +176  #endif
  +177

  +240  #if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004
  +241  #else
  +242  # define __restrict__
  +243  #endif
  +244  #define restrict __restrict__
  +245

********

Using the command (note arguments -E and -qinfo=all):

nohup xlc -E -qinfo=all -Iext/date/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1 -Iext/date/ -I/data/prj/php/src/php-7.0.7/ext/date/
 -DPHP_ATOM_INC -I/data/prj/php/php-7.0.7/include -I/data/prj/php/php-7.0.7/main -I/data/prj/php/src/php-7.0.7 -I/data/prj/php/php-7.0.7/ext/date/lib -I
/data/prj/php/src/php-7.0.7/ext/date/lib -I/opt/include/libxml2 -I/data/prj/php/src/php-7.0.7/ext/sqlite3/libsqlite -I/data/prj/php/php-7.0.7/TSRM -I/da
ta/prj/php/php-7.0.7/Zend -I/data/prj/php/src/php-7.0.7/main -I/data/prj/php/src/php-7.0.7/Zend -I/data/prj/php/src/php-7.0.7/TSRM -I/data/prj/php/php-7
.0.7/    -I/usr/include -g   -c /data/prj/php/src/php-7.0.7/ext/date/lib/parse_tz.c -o ext/date/lib/parse_tz.lo > bug62346.i

Key lines in bug62346.i contain the following:


"/usr/include/standards.h", line 172.2: 1506-454 (I) if condition evaluates to 1.
"/usr/include/standards.h", line 173.9: 1506-441 (I) The macro definition will override the keyword "__restrict__".

#line 173
#define __restrict__ restrict

"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 240.2: 1506-460 (I) if nesting level is 7.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 240.13: 1506-455 (I) defined(__GNUC__) evaluates to 0.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 240.2: 1506-454 (I) if condition evaluates to 0.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 240.2: 1506-464 (I) Begin skipping tokens.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 241.2: 1506-460 (I) else nesting level is 7.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 241.2: 1506-456 (I) Stop skipping tokens.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 242.10: 1506-441 (I) The macro definition will override the keyword "__restrict__".
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 242.10: 1506-236 (W) Macro name __restrict__ has been redefined.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 242.10: 1506-358 (I) "__restrict__" is defined on line 173 of /usr/include/standards.h.
"/data/prj/php/src/php-7.0.7/Zend/zend_portability.h", line 243.2: 1506-460 (I) endif nesting level is 7.


#line 242
# define __restrict__

#define restrict __restrict__

*******
I do not know what the keyword does 

but what (good) is the net result? after:

AIX:
#line 173
#define __restrict__ restrict
ZEND
#line 242
# define __restrict__

#define restrict __restrict__
*******
Confusing at the least - perhaps counter-productive...
 [2016-06-03 09:32 UTC] mamfelt at gmail dot com
p.s. subject line mentions zend.h, however the file is now, or also: zend_portability.h
 [2020-04-16 16:38 UTC] nikic@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: nikic
 [2020-04-16 16:38 UTC] nikic@php.net
Only mentions of __restrict__ in 7.4 are inside ffi, so this must've been fixed at some point in the meantime...
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Dec 30 14:01:28 2024 UTC