From dc4f19e86d5f4ce14b8f6dce5efd4da77be88a43 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 8 May 2026 09:37:21 +0200 Subject: [PATCH 1/2] [skip ci] Remove PECL build This build is not useful for multiple reasons: - Legitimate API changes keep making the build red. Frequently it takes 3rd party extension developers months to fix these issues. - Once we're annoyed enough by the red build we skip it and then don't revert it way after it has been fixed. - True accidental API changes are incredibly rare. I don't believe I've experienced one yet. - This build only runs for master, which is also the branch where accidental changes are least problematic. Closes GH-21980 --- .github/matrix.php | 4 -- .github/workflows/test-suite.yml | 108 ------------------------------- 2 files changed, 112 deletions(-) diff --git a/.github/matrix.php b/.github/matrix.php index 111aebfb94d1..7970442d7050 100644 --- a/.github/matrix.php +++ b/.github/matrix.php @@ -61,7 +61,6 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re $test_macos = in_array('CI: macOS', $labels, true); $test_msan = in_array('CI: MSAN', $labels, true); $test_opcache_variation = in_array('CI: Opcache Variation', $labels, true); - $test_pecl = in_array('CI: PECL', $labels, true); $test_solaris = in_array('CI: Solaris', $labels, true); $test_windows = in_array('CI: Windows', $labels, true); @@ -137,9 +136,6 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re if ($all_jobs || $test_opcache_variation) { $jobs['OPCACHE_VARIATION'] = true; } - if (($all_jobs && $ref === 'master') || $test_pecl) { - $jobs['PECL'] = true; - } if (version_compare($php_version, '8.6', '>=') && ($all_jobs || $test_solaris)) { $jobs['SOLARIS'] = true; } diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index af25523805da..7b1850aa1075 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -827,114 +827,6 @@ jobs: uses: ./.github/actions/test-libmysqlclient - name: Verify generated files are up to date uses: ./.github/actions/verify-generated-files - PECL: - if: ${{ fromJson(inputs.branch).jobs.PECL }} - runs-on: ubuntu-24.04 - steps: - - name: git checkout PHP - uses: actions/checkout@v6 - with: - path: php - ref: ${{ fromJson(inputs.branch).ref }} - # Used for ccache action - - name: Move .github - run: mv php/.github . - - name: git checkout apcu - uses: actions/checkout@v6 - with: - repository: krakjoe/apcu - path: apcu - - name: git checkout imagick - uses: actions/checkout@v6 - with: - repository: Imagick/imagick - path: imagick - - name: git checkout memcached - uses: actions/checkout@v6 - with: - repository: php-memcached-dev/php-memcached - path: memcached - - name: git checkout redis - if: ${{ false }} - uses: actions/checkout@v6 - with: - repository: phpredis/phpredis - path: redis - - name: git checkout xdebug - uses: actions/checkout@v6 - with: - repository: xdebug/xdebug - path: xdebug - - name: git checkout yaml - uses: actions/checkout@v6 - with: - repository: php/pecl-file_formats-yaml - path: yaml - - name: apt - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - ccache \ - libmemcached-dev \ - imagemagick \ - libmagickwand-dev \ - bison \ - re2c - - name: ccache - uses: ./.github/actions/ccache - with: - name: "${{ github.job }}" - php_directory: php - - name: build PHP - run: | - cd php - ./buildconf --force - ./configure \ - --enable-option-checking=fatal \ - --prefix=/opt/php \ - --enable-cli \ - --disable-all \ - --enable-session \ - --enable-werror - make -j$(/usr/bin/nproc) - sudo make install - - name: build apcu - run: | - cd apcu - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) - - name: build imagick - run: | - cd imagick - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) - - name: build memcached - run: | - cd memcached - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) - - name: build redis - if: ${{ false }} - run: | - cd redis - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) - - name: build xdebug - run: | - cd xdebug - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) - - name: build yaml - run: | - cd yaml - /opt/php/bin/phpize - ./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config - make -j$(/usr/bin/nproc) WINDOWS: if: ${{ fromJson(inputs.branch).jobs.WINDOWS }} strategy: From 3447c58de1002a2c0f831c6df0407cc835f5e96f Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 26 May 2026 13:15:18 +0100 Subject: [PATCH 2/2] Zend: no need to fetch method name for constructor (#22153) --- Zend/zend_inheritance.c | 6 +++--- Zend/zend_object_handlers.c | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index d70d08f5f1c4..e85b4ea42250 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -188,9 +188,9 @@ static void do_inherit_parent_constructor(zend_class_entry *ce) /* {{{ */ if (ce->constructor) { if (parent->constructor && UNEXPECTED(parent->constructor->common.fn_flags & ZEND_ACC_FINAL)) { - zend_error_noreturn(E_ERROR, "Cannot override final %s::%s() with %s::%s()", - ZSTR_VAL(parent->name), ZSTR_VAL(parent->constructor->common.function_name), - ZSTR_VAL(ce->name), ZSTR_VAL(ce->constructor->common.function_name)); + zend_error_noreturn(E_ERROR, "Cannot override final %s::__construct() with %s::__construct()", + ZSTR_VAL(parent->name), + ZSTR_VAL(ce->name)); } return; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 571aa9e92abc..e7ddd466a51a 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -2176,12 +2176,16 @@ ZEND_API ZEND_COLD bool zend_std_unset_static_property(const zend_class_entry *c static ZEND_COLD zend_never_inline void zend_bad_constructor_call(const zend_function *constructor, const zend_class_entry *scope) /* {{{ */ { if (scope) { - zend_throw_error(NULL, "Call to %s %s::%s() from scope %s", - zend_visibility_string(constructor->common.fn_flags), ZSTR_VAL(constructor->common.scope->name), - ZSTR_VAL(constructor->common.function_name), ZSTR_VAL(scope->name) + zend_throw_error(NULL, "Call to %s %s::__construct() from scope %s", + zend_visibility_string(constructor->common.fn_flags), + ZSTR_VAL(constructor->common.scope->name), + ZSTR_VAL(scope->name) ); } else { - zend_throw_error(NULL, "Call to %s %s::%s() from global scope", zend_visibility_string(constructor->common.fn_flags), ZSTR_VAL(constructor->common.scope->name), ZSTR_VAL(constructor->common.function_name)); + zend_throw_error(NULL, "Call to %s %s::__construct() from global scope", + zend_visibility_string(constructor->common.fn_flags), + ZSTR_VAL(constructor->common.scope->name) + ); } } /* }}} */