Skip to content

Zend/zend_portability.h:789:49: error: expected constructor, destructor, or type conversion before '(' token #19169

Closed

Description

@psumbera

Description

While building PHP 8.4 with -std=c++17 I get:

/bin/bash /builds/psumbera/useralnd-test/components/php/php84/build/amd64/libtool --silent --preserve-dup-deps --tag=CXX --mode=compile /usr/gcc/14/bin/g++ -Iext/intl/ -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/intl/ -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/main -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64 -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/main -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5 -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/ext/date/lib -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/date/lib -I/usr/include/libxml2 -I/usr/openssl/3/include -I/usr/include/pcre -I/usr/include/idn -I/usr/include/kerberosv5 -I/usr/include/enchant -I/usr/include/glib-2.0 -I/usr/lib/amd64/glib-2.0/include -I/usr/include/gd2 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/webp -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/mbstring/libmbfl -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/ext/mbstring/libmbfl -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/mbstring/libmbfl/mbfl -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/ext/mbstring/libmbfl/mbfl -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/TSRM -I/builds/psumbera/useralnd-test/components/php/php84/build/amd64/Zend -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend -I/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/TSRM  -m64 -D_POSIX_PTHREAD_SEMANTICS -D_GNU_SOURCE -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -pthread  -m64 -O3 -ffile-prefix-map=/builds/psumbera/useralnd-test/components/php/php84=. -pthread    -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17  -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/intl/common/common_enum.cpp -o ext/intl/common/common_enum.lo  -MMD -MF ext/intl/common/common_enum.dep -MT ext/intl/common/common_enum.lo
In file included from /builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend/zend_types.h:25,
                 from /builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/intl/intl_convertcpp.h:23,
                 from /builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/ext/intl/intl_convertcpp.cpp:17:
/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend/zend_portability.h:789:49: error: expected constructor, destructor, or type conversion before '(' token
  789 | # define ZEND_STATIC_ASSERT(c, m) _Static_assert((c), m)
      |                                                 ^
/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend/zend_compile.h:683:1: note: in expansion of macro 'ZEND_STATIC_ASSERT'
  683 | ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
      | ^~~~~~~~~~~~~~~~~~
/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend/zend_portability.h:789:49: error: expected constructor, destructor, or type conversion before '(' token
  789 | # define ZEND_STATIC_ASSERT(c, m) _Static_assert((c), m)
      |                                                 ^
/builds/psumbera/useralnd-test/components/php/php84/php-8.4.5/Zend/zend_execute.h:222:1: note: in expansion of macro 'ZEND_STATIC_ASSERT'
  222 | ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
      | ^~~~~~~~~~~~~~~~~~

The issue can be resolved with:

--- php-8.4.5/Zend/zend_portability.h
+++ php-8.4.5/Zend/zend_portability.h
@@ -785,7 +785,9 @@
 /** @deprecated */
 #define ZEND_CGG_DIAGNOSTIC_IGNORED_END ZEND_DIAGNOSTIC_IGNORED_END

-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */
+#if defined(__cplusplus)
+# define ZEND_STATIC_ASSERT(c, m) static_assert((c), m)
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */
 # define ZEND_STATIC_ASSERT(c, m) _Static_assert((c), m)
 #else
 # define ZEND_STATIC_ASSERT(c, m)

PHP Version

PHP 8.4.5 (but the same code is with 8.4.10).

Operating System

Solaris 11.4

Activity

  1. devnexen commented on Jul 18, 2025

    @devnexen
    Member

    Hi @psumbera thanks for your report. Would you mind making a PR ? looking correct to me.

  2. linked a pull request that will close this issueFix ZEND_STATIC_ASSERT for -std=c++17 #19175on Jul 18, 2025
  3. added a commit that references this issue on Jul 18, 2025
    be09985
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions