Skip to content

Optimize strlen() and in_array() opcodes #4981

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

TysonAndre
Copy link
Contributor

  • Don't save the opline or check for exceptions if it isn't needed.
    (only affects temporary expressions, not $cv)
  • Be more specific about the way to free string operands
// test_strlen(10000000): .402 -> .387 at 2.5GHz
function test_strlen(int $n) {
    $total = 0;
    for ($i = 0; $i < $n; $i++) {
        $total += strlen((string)$i);
    }
    return $total;
}
// test_in_array(40000000): .54 -> .44 at 2.5GHz
function test_in_array(int $n) {
    $total = 0;
    for ($i = 0; $i < $n; $i++) {
        if (in_array($i, [1, 50, 100], true)) {
            $total += $i;
        }
    }
    return $total;
}

- Don't save the opline or check for exceptions if it isn't needed.
  (only affects temporary expressions, not $cv)
- Be more specific about the way to free string operands

```php
// test_strlen(10000000): .402 -> .387 at 2.5GHz
function test_strlen(int $n) {
    $total = 0;
    for ($i = 0; $i < $n; $i++) {
        $total += strlen((string)$i);
    }
    return $total;
}
// test_in_array(40000000): .54 -> .44 at 2.5GHz
function test_in_array(int $n) {
    $total = 0;
    for ($i = 0; $i < $n; $i++) {
        if (in_array($i, [1, 50, 100], true)) {
            $total += $i;
        }
    }
    return $total;
}
```
@TysonAndre
Copy link
Contributor Author

@nikic @dstogov - thoughts?

Copy link
Member

@dstogov dstogov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll fix and commit this.

FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
ZEND_VM_SMART_BRANCH(result, OP1_TYPE & (IS_TMP_VAR|IS_VAR));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

zend_compare() may throw exception

Comment on lines +8922 to +8926
if (Z_TYPE_P(op1) == IS_STRING) {
result = zend_hash_find_ex(ht, Z_STR_P(op1), OP1_TYPE == IS_CONST);
} else if (Z_TYPE_P(op1) == IS_LONG) {
result = zend_hash_index_find(ht, Z_LVAL_P(op1));
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These checks make sense only if op1 was IS_REFERENCE

Comment on lines +8935 to +8937
result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't make a lot of sense to over-optimize for exceptional cases.

}
ZEND_VM_SMART_BRANCH(0, 0);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FREE_OP1() and exception checks missing

@dstogov
Copy link
Member

dstogov commented Feb 16, 2021

The most important issue, that in case of Z_TYPE_P(op1) == IS_REFERENCE && opline->extended_value == 0 you don't perform fast zend_hash_find() and fall-back to linear search.

@dstogov
Copy link
Member

dstogov commented Feb 16, 2021

Merged as f8cf715

@dstogov dstogov closed this Feb 16, 2021
clrpackages pushed a commit to clearlinux-pkgs/php that referenced this pull request Dec 7, 2021
Aaron Piotrowski (29):
      Implement Fibers
      Fix exception thrown during fiber destruction
      Minor fiber fixes
      Improve fiber backtraces
      Check current_execute_data instead of flags in fiber destructor
      Catch and repeat zend_bailout in fibers
      Add sanitizer fiber switching support
      Rename sanitizer members for clarity
      Move fiber stack allocation within try
      Do not free tick function entry
      Fix tick function with arguments
      Remove unnecessay NULL
      Switch register_tick_function back to zend_parse_parameters
      Add internal Fiber API (#7045)
      Split fiber status and flags (#7094)
      Improve Fiber::getReturn()
      Merge fiber switching functions (#7106)
      Improve fiber interoperability (#7128)
      Reorganize zend_test and add custom fiber implementation tests (#7137)
      Change stack field to a pointer in fiber context
      Add test for leaking prior context with symmetric coroutines
      Add API to prevent Fiber switch in select contexts
      Remove fiber context embedding
      Drop fiber block hooks
      Rename Fiber::this() to Fiber::getCurrent() (#7155)
      Fiber cleanup
      Remove copying of fiber result to transfer value
      Allow creating Graceful/UnwindExit and use when destroying a fiber (#7174)
      Fiber ucontext support (#7226)

Adam Baratz (2):
      Add MSSQL setup to Azure Pipelines build
      Remove flakiness from tests

Alex Dowad (136):
      Avoid compiler warnings related to mbstring flush functions
      Refactor UTF-16LE -> wchar conversion code
      Remove useless validity check when converting UTF-16LE -> wchar
      Remove useless constants MBFL_CHP_{CTL,DIGIT,UALPHA,LALPHA,MSPECIAL}
      Refactor mbfl_ident.c, mbfl_encoding.c, mbfl_memory_device.c, mbfl_string.c
      Add mbstring identify filter for '7bit' encoding
      Handle illegal bytes properly when converting to '7bit' encoding
      Add identify filter for UTF-16, UTF-16LE, UTF-16BE
      Add mbstring identify filter for 'binary' encoding
      Add identify filter for UCS-2, UCS-2BE, and UCS-2LE encodings
      Add comment explaining mUTF-7 to mbfilter_utf7imap.c
      Add 'mUTF-7' alias for UTF7-IMAP encoding
      mUTF-7 (UTF7-IMAP) conversion: handle illegal (non-RFC-compliant) input correctly
      Remove unused IS_SJIS1 and IS_SJIS2 macros
      Add identify filter for ISO-8859-16 (Latin-10) encoding
      Add identify filter for ISO-8859-3 (Latin-3)
      Add identify filter for ISO-8859-6 (Latin/Arabic)
      Add identify filter for ISO-8859-7 (Latin/Greek)
      Add identify filter for ISO-8859-8 (Latin/Hebrew)
      Do not pass invalid ISO-8859-{3,6,7,8} characters through silently
      Add test suite for ISO-8859-x encoding verification and conversion
      UTF-16 text conversion handles truncated characters as illegal
      Improve error handling for UTF-16{,BE,LE}
      Add identify filter for UTF-32{,BE,LE}
      UTF-32 conversion treats truncated characters as illegal
      Fix mbstring support for CP1252 encoding
      Add test suite for CP1252 encoding
      Test cases for mbstring encodings are less repetitive
      Fix mbstring support for CP1251 encoding
      Add test suite for CP1251 encoding
      Fix mbstring support for CP1254 encoding
      Add test suite for CP1254 encoding
      All bytes are valid in CP866 encoding
      Remove dead code from mbfilter_cp866.c (and do general code cleanup)
      Add test suite for CP866 encoding
      All bytes are valid in CP850 encoding
      Remove dead code from mbfilter_cp850.c (and do general code cleanup)
      Add test suite for CP850 encoding
      All bytes are valid in KOI8-R encoding
      Remove dead code from mbfilter_koi8r.c
      Remove dead code from mbfilter_iso8859_{2,4,5,9,10,13,14,15,16}.c
      Add test suite for KOI8-R encoding
      All bytes are valid in KOI8-U encoding
      Remove dead code from mbfilter_koi8u.c (and do general code cleanup)
      Add test suite for KOI8-U encoding
      Optimize (AND FIX) mb_check_encoding (cut execution time by 50%+)
      Fix mbstring support for ARMSCII-8
      Add test suite for ARMSCII-8 encoding
      Fix issues with mbstring encoding tests
      Remove useless byte{2,4}{be,le} encodings from mbstring
      Fix mbstring support for Shift-JIS
      Fix mbstring support for EUC-JP text encoding
      Treat non-ASCII characters as erroneous when converting ASCII text
      Remove mbstring identify filters
      Test EUC-JP and Shift-JIS more thoroughly
      Don't redundantly flush mbstring filters multiple times
      Fix broken binary search function in mbstring
      SJIS-2004 encoding conversion: handle invalid (or truncated) 2nd byte for Kanji correctly
      Don't mangle non-Japanese chars which appear after a 'combining' kana in SJIS-2004
      Add test suite for SJIS-2004 encoding
      SJIS-mac encoding conversion: handle invalid (or truncated) 2nd byte for Kanji correctly
      Convert Unicode halfwidth Yen sign to MacJapanese halfwidth Yen sign
      SJIS-mac encoding conversion: Stop the carnage of innocent Unicode codepoints
      Unicode -> SJIS-mac conversion doesn't reject valid codepoints after a bad transcoding hint
      Add test suite for SJIS-mac encoding
      Leading BOM is stripped for UTF-32
      Enhance mbstring support for UCS-2 text
      Consolidate all single-byte encodings in one source file
      Bugfixes for findInvalidChars (helper for mbstring test suite)
      Enhance handling of CP932 text encoding
      Don't pass invalid JIS X 0208 characters through
      Don't pass invalid JIS X 0212, JIS X 0213, and Windows-CP932 characters through
      Combine MBFL_ENCTYPE_WCS{2,4}{BE,LE} constants
      Combine MBFL_ENCTYPE_MWC2{BE,LE} constants
      Fix mbstring support for SJIS-Mobile (DoCoMo, KDDI, and Softbank variants of Shift-JIS)
      Enhance handling of CP51932 encoding
      0x5C is not a backslash in Shift-JIS-2004
      0x5C is not a Yen sign in CP932 (or CP51932)
      0x7E is not a tilde in Shift-JIS{,-2004}
      Convert U+203E (OVERLINE) to 0x8150 (FULLWIDTH MACRON) in some SJIS variants
      Convert U+FF5E (FULLWIDTH TILDE) to 0x8160 (WAVE DASH) in SJIS variants
      Convert U+00AF (MACRON) to 0x8150 (FULLWIDTH MACRON) in some SJIS variants
      ISO-2022-JP-2004 conversion: represent backslash and tilde as ASCII
      ISO-2022-JP-2004 conversion: treat unrecognized escapes as error
      ISO-2022-JP-2004 conversion: handle invalid characters correctly
      Add comment explaining why ISO-2022-JP-2004, etc strings end with ESC ( B
      JIS7/JIS8 encoding: treat unrecognized escapes as error
      JIS7/JIS8 encoding: use JISX0201 for U+203E (overline)
      JIS7/JIS8 encoding: handle invalid 2nd byte for Kanji correctly
      JIS7/JIS8 encoding: treat truncated multibyte characters as error
      Stricter handling of erroneous input when converting CP5022{0,1,2} text encoding
      CP5022{0,1,2}: convert characters in ku 0x2D (13th row) correctly
      CP5022{0,1,2}: convert Unicode codepoints in 'user' area (0xE000-E757) correctly
      CP5022{0,1,2}: use JISX0201 for U+203E (overline)
      CP5022{0,1,2}: treat unrecognized escapes as error
      Add test suite for CP5022{0,1,2}
      CP5022{0,1,2}: treat truncated multibyte characters as error
      Remove useless mbstring encoding 'CP50220-raw'
      Remove useless mbstring encoding 'JIS-ms'
      Remove unused macros from mbfilter_cp51932.c, mbfilter_iso2022jp_mobile.c
      Remove useless constant MBFL_ENCTYPE_MBCS
      Update 'East Asian Width' table to comply with Unicode 13.0
      Remove useless function mbfl_filt_tl_jisx0201_jisx0208_init
      Remove unused 'next_filter' member from mbfl_filt_tl_jisx0201_jisx0208_param struct
      Remove unneeded 'filter_ctor' member from mbfl_convert_filter struct
      Simplify code for working with halfwidth/fullwidth kana conversion filter
      Refactor mbfl_filt_tl_jisx0201_jisx0208 by moving kana conversion into helper function
      Fix error reporting bug for Unicode -> CP50220 conversion
      Code cleanup in mbfilter_utf7.c
      Catch and handle errors in UTF-7 text conversion
      Code cleanup in mbfilter_utf7imap.c
      Catch and handle errors in mUTF-7 (IMAP) conversion
      Add test suite for mUTF-7 (IMAP) encoding
      Fix mbstring support for ISO-2022-JP-KDDI encoding
      Fix mbstring support for ISO-2022-JP-MS encoding
      Improve documentation for contributors
      Add test suite for UTF-{7,8,16,32}
      Remove duplicate implementation of CP932 from mbstring
      Mark CP932 and CP51932 encoding tests as 'slow tests'
      Minor formatting tweaks in mbfilter_uhc.c
      Strict conversion of UHC text to Unicode
      When flushing CP5022x conversion filter, also flush next filter in chain
      Minor formatting tweaks in mbfilter_euc_kr.c
      Fix conversion of HZ text (and add test suite)
      Fix conversion of CP936 text (and add test suite)
      Remove table generation scripts which have not been used for years
      Fix conversion of EUC-KR text (and add test suite)
      Fix conversion of EUC-CN text (and add test suite)
      Fix conversion of EUC-TW text (and add test suite)
      Fix conversion of EUC-JP-2004 text (and add test suite)
      Code cleanup in mbfilter_uhc.c
      Fix conversion of ISO-2022-KR text (and add test suite)
      Fix conversion of Big5 and CP950 text (and add test suite)
      Reduce size of conversion tables for CP936
      Fix conversion of GB18030 text (and add test suite)
      Fix typo in mbfilter.h

Alex Erohin (1):
      Coding style tweaks for zend_vm_gen.php

Alex McLean (1):
      Add test cases for bcmath ValueErrors

Alexander Moskalev (1):
      cURL: make possible to send file from buffer string

Anatol Belski (41):
      hash: Add MurmurHash3 with streaming support
      NEWS: Add murmurhash info [ci skip]
      UPGRADING: Add murmurhash note [ci skip]
      hash: murmur: Suppress sanitize warnings under GCC
      hash: murmur: Fix GCC support version for no_sanitize
      hash: murmur: Initialize final hash explicitly
      hash: Add build dir for ext/hash/murmur
      hash: Support custom algo parameters
      UPGRADING: Document algorithm specific hash options [ci skip]
      UPGRADING.INTERNALS: Document hash init signature changes [ci skip]
      hash: Fix signatures in the final callback defs
      hash: Implement xxHash
      hash: Use hrtime() in the bench script [ci skip]
      UPGRADING: Add xxHash notes [ci skip]
      NEWS: Add xxhash note [ci skip]
      NEWS: Fix typo [ci skip]
      hash: Implement secret support for xxh3 and xxh128
      UPGRADING: Add note about xxHash secret and fix a typo
      NEWS: Associate FR to xxHash additions
      hash: xxhash: Use canonicalization routine from existing API
      hash: Fix -Warray-parameter= warnings
      fileinfo: Port libmagic 5.40
      fileinfo: Restore config.h for libmagic
      fileinfo: Fix VS compat
      fileinfo: More VS compat
      fileinfo: Update libmagic.patch
      fileinfo: Turn back the WS check mitigation
      fileinfo: Update the patch
      fileinfo: Fix version in patch update script
      fileinfo: Pull upstream tests
      fileinfo: Obey POSIX in pattern conversion
      Revert "fileinfo: Obey POSIX in pattern conversion"
      libtool: Add CC tag explicitly
      Zend: Cleanup dead assignment in zend_compile_class_const
      ext: Cleanup some dead assignments
      pcre2lib: Pull PCRE2 10.37
      pcre2lib: Fix wrong check-in
      NEWS: UPGRADING.INTERNALS: Add PCRE2 10.37 info
      pcre: Workaround bug #81101
      pcre: Apply upstream patch for bug #81101 to bundled libpcre
      phar: crc32: Extend and cleanup API for the new bulk crc32 functions

Andrii Dembitskyi (1):
      Fix SplFileObject::fseek() method description (#7321)

Andy Postnikov (1):
      Backport libgd commit

Anna Filina (1):
      Add test to verify file_get_contents error with folder

Anton Vasiliev (1):
      Fix typo

Ayesh Karunaratne (10):
      FTP: Disallow direct `FTPConnection` construction
      IMAP: Disallow direct `new IMAPConnection()` construct
      IMAP: Declare `IMAPConnection` class as `final` (stub+test)
      Curl: Add CURLOPT_DOH_URL option
      [skip-ci] Update UPGRADING file with new `IMAP` namespace
      Move FTP extension class `FTPConnection` to `FTP\Connection`
      Move resource-object classes of LDAP to `\LDAP` namespaces (#6963)
      Move resource-object classes of PSpell to `\PSpell` namespace
      Improve interface non-public method error message
      Update deprecation message for incompatible float to int conversion

Bartosz Gorski (1):
      Removed mentions of git.php.net from the documentation

Ben Morss (5):
      Add avif support to ext/gd
      Reduce girl.avif by 4x
      AVIF support for getimagesize() and imagecreatefromstring()
      Disable strict pixi requirement for libavif >= 0.9.1
      Lossless conversion for webp

Ben Ramsey (10):
      Add entries for new behavior of PDO_ODBC server info/version attributes
      Add entries for new Sodium functions to NEWS
      Revert "Remove no longer used "log_errors_max_len" ini directive (#6838)"
      Fix typo in ezmlm command in release-process doc
      The master branch is now for 8.1.0alpha3
      The master branch is now for 8.1.0beta1
      The master branch is now for 8.1.0beta2
      Change release process to create branch at RC1
      The master branch is now for 8.1.0beta3
      Update versions for PHP 8.1.0beta3

Benjamin Eberlei (2):
      Add host for php_network_getaddresses getaddrinfo failed error message. (#7181)
      Fix #80097: Have ReflectionAttribute implement Reflector and __toString

Björn Tantau (1):
      Fix #77372: Retain full path of files for directory uploads (#6917)

Brent Roose (1):
      Fix typo "without-pcre-jit"

Calison (1):
      Return early on php display error for better legibility

Calvin Buckley (3):
      Check liveness in PDO_ODBC
      Implement server type/version for PDO_ODBC getAttr (#6935)
      AIX/XCOFF support for fibers (#7338)

Cameron Hall (1):
      Fix #42357: fputcsv() has an optional parameter for line endings

Cameron Porter (2):
      Fixed bug #80724
      Fixed bug #81085: Add version 7.71.0 blob options.

Cees-Jan Kiewiet (1):
      Add support for openmetrics formatting to FPM status

Christoph M. Becker (29):
      Remove IGNORE_URL_WIN macro
      Raise E_WARNING on PHP related errors
      Add --repeat flag to usage info of run-tests.php
      Fix inclusion order for phpize builds on Windows
      Fix typos in comments
      php_tidy_create_node() expects a fixed set of node_types
      Return early from php_search_array()
      Clarify and assert that printf() and friends never return NULL
      Disallow version_compare() $operator abbreviations
      Convert file_info resources to objects
      Fix #77423: parse_url() will deliver a wrong host to user
      Initalize return_value before use
      Fix new test wrt. removed skipif.inc
      Migrate skip checks to --EXTENSIONS-- for ext/gd
      Adjust run-tests.php to dynamic extension loading
      Don't add unnecessary extensions to the test INI for AppVeyor
      Speed up test case
      Mark slow tests
      bug81119.phpt requires ext/gmp
      Remove temporary workaround for installing libavif
      Improve performance of AppVeyor test runs
      Deprecate $num_points parameter of image(open|filled)polygon
      Fix Windows debug builds
      Provide bless_tests.patch for failing tests on AppVeyor
      Skip new preload test on Windows
      [ci skip] UPGRADING: oci8.old_oci_close_semantics has been deprecated
      Use --EXTENSIONS-- instead of --SKIPIF-- in new test case
      Remove full stop from error message
      Fix #78919: CLI server: insufficient cleanup if request startup fails

Christopher Jones (4):
      Fix PDO_OCI build
      Fix failures due to new deprecations
      Update NEWS for #77120
      Update OCI8 tests for oci8.old_oci_close_semantics deprecation

Craig Francis (1):
      Use ENT_QUOTES|ENT_SUBSTITUTE default for HTML encoding and decoding functions

DannyS712 (1):
      zend_language_parser.y: Fix a documentation typo

Darek Slusarczyk (2):
      Fix #80330: Replace language in APIs and source code/docs
      Fix #80329: Add option to specify LOAD DATA LOCAL white list folder

David CARLIER (14):
      hrtime implementation update for Mac
      Distinguishing opcache SHM on stats tools for Mac
      Fix ubsan warning on macos
      Use VM_MAKE_TAG for macos memory tag
      fpm master/child process rename, enable on mac os.
      stream: Fix MacOS build. fsync as alias for fdatasync. (#6882)
      Add FreeBSD to CI (#6974)
      pcntl add darwin specific flags for who/which especially (#7075)
      fdatasync disable warning on macOS. (#7122)
      Litespeed sapi OpenBSD build fix (#3999)
      define SO_ACCEPTFILTER separately where supported (#7146)
      exposing few macOS socket options to give hints how to handle data,
      Fix pointer constness warning in crc32 module on arm64 (#7225)
      Fix dns resolv linkage issue on haiku (#7350)

David Carlier (10):
      posix: adding freebsd specific rlimit constants
      Implement fetching TLS TCB offset on MacOS
      Avoid repeatedly calling strlen in FPM setproctitle implementation
      pcntl: Adding pcntl_rfork support.
      Pull #6989 FreeBSD defines SO_ACCEPTFILTER
      pcntl_rfork: following-up suggestions.
      crc32 feature detection from auxiliary vectors on FreeBSD
      sockets exposing TC_DEFER_ACCEPT to optimise tcp exchanges.
      sockets enabling SO_MARK socket option which is relatively similar
      getrandom support for DragonFlyBSD too.

David Gebler (2):
      Add IL compat flag to Windows builds
      Add fsync() and fdatasync() functions

Derick Alangi (1):
      [skip-ci] Improve documentation for better clarity to readers (#7066)

Derick Rethans (9):
      Updated to version 2020.3 (2020c)
      Updated to version 2020.4 (2020d)
      Updated to version 2021.1 (2021a)
      Upgrade timelib to 2021.03 and fix many date/time issues
      Skip test on 32bit, as the timestamp range is outside 32bit range
      Upgrade timelib to 2021.06
      Import timelib 2021.07
      Fixed bug #80963: DateTimeZone::getTransitions() truncated
      Fixed test by adding echo and expected string

Dharman (9):
      Avoid throwing warnings in mysqlnd
      client_info is a constant and doesn't need a connection
      Remove unused mysqli global
      Remove redundant macros in mysqli_driver implementation
      Clean up mysqli_driver test cases
      Deprecate mysqli driver_version property
      Add CLEAN sections to mysqli and PDO mysql tests
      Change the default error mode of mysqli
      Deprecate OO style mysqli::get_client_info method

Dmitry Stogov (304):
      Fix conflict
      Remove redundand IS_INDIRECT checks (they were necessary for $GLOBALS handling)
      Better CPU registers usage
      PHP array cannot refer to EG(symbol_table) any more. Replace corresponding checks by ZEND_ASSERT().
      Cleanup:
      Always use CG(arena) for unin type lists
      Avoid modification of trait info
      Mark classes cached by opcache by ZEND_ACC_CACHED flag and prevent useless copying and desrpoying of immutable data.
      Fixed crash in ZTS build with --repeat option
      Remove useless zend_update_class_constants() calls
      Added Inheritance Cache.
      Use IS_ALIAS_PTR to make distinct between aliasses and real classes
      Reuse single map_ptr slot for indentical class names
      Fixed map_ptr slot sharing for trait/self
      Use zend_type.ce_cache__ptr for caching class resulution during argument/result type checks
      Unserialize op_array->scope before passing to zend_file_cache_unserialize_type().
      Link unbound simple classes (without parent/intefaces/traits) in first place.
      Avoid useless SHM data duplication
      Persist class name before methods, because it may be used insted of "self"
      Microoptimization of STRLEN and IN_ARRAY opcodes (based on https://github.com/php/php-src/pull/4981)
      Improved unserialize() performance. Checks for object propery "visibility change" were moved, to be performed only if name/visibility had been really changed.
      unserialize() optimization. Omit class name validation before hash lookup, and perform it only before autoloading.
      We don't need map_ptr slots for op_array.run_time_cache during preloading.
      Properly relove self::CONSTANT at compile time
      Improve basename(). Avoid calling mblen() for ASCII compatible locales.
      Attempt to fix ext\standard\tests\file\basename_bug66395_variation2-win32.phpt and ext\standard\tests\file\pathinfo_basic1-win32.phpt
      Fixed NULL pointer dereference
      Reduce ZPP API overhead
      Remove class validation. zend_lookup_class_ex() performs it anyway.
      Revert "Remove class validation. zend_lookup_class_ex() performs it anyway."
      Fixed error message
      Switch few functions useful in Symphony apps to new ZPP API.
      Speed up __sleep() and __wakeup() calls
      Improve SPL directory and stat() cache using zend_srting* instead of char*
      Optimize out zend_strpprintf() usage for simple concationaton
      serialize() optimization
      Change the order of properties used for var_dump(), serialize(), comparison, etc.
      Added UPGRADING note.
      Incomplete class may have only single "MAGIC_MEMBER"
      Optimized object serialization without rebulding properties HashTable
      Optimized object encoding without rebulding properties HashTable
      Optimized object conversion to array without rebulding properties HashTable
      Loop invariant code motion
      Switch to new ZPP
      Switch to new ZPP
      Avoid useless date conversion
      Cache haschildren/getchildren methods of recursive iterators.
      typo
      Use spl_filesystem_object.file_name for SPL_FS_DIR as a cache and prevent multiple file name reconstruction.
      Fixed assertion (ext/opcache/zend_persist.c:327: zend_accel_get_type_map_ptr: Assertion `ret > 2' failed)
      Inheritance cache optimization
      Avoid repeatable work when error_reporting() is called with the same argument few times.
      zend_verify_recv_arg_type_helper is not "cold".
      Inline "array" part of FE_FETCH_R handler into HYBRID VM
      Fixed compilation warning
      Remove deprecated code
      Change Zend Stream API to use zend_string* instead of char*.
      Fix CLANG/RELEASE build (this is a workaround for probable bug in CLANG)
      "zend-test" was renamed to "zend_test"
      XFAIL on WIN64 because of problem in libffi
      micro-optimization
      Add zend_hash_lookup() and zend_hash_index_lookup() functions.
      Use zend_hash_lookup()
      Use better function
      Use zend_string* instead of char*
      strtr() optimization
      Use capstone disassembler, if available.
      Move x86 dependent code out from platform independed parts.
      Move system independent code out from x86 specific header
      Replace function with macro
      Improved type inference for FE_FETCH_R
      Improve JIT for IS_IDENTICAL
      Improved JIT for TYPE_CHECK opcode
      Simplify auto-globals checks
      We don't create an actual variable for $GLOBALS any more.
      Use better function
      Remove reference to $GLOBALS. We don't create an actual variable for $GLOBALS any more .
      Merge upstream DynAsm changes from LuaJIT
      Avoid reading of property name in FETCH_OBJ_R/IS if it can be accessed through run-time cache slot.
      Avoid reading of property name in ASSIGN_OBJ if it can be accessed through run-time cache slot.
      Reduce number of stat() calls
      We don't have to clear zend_object structure, it's initialized by zend_object_std_init() anyway.
      clear only neccessary part of spl_filesystem_object
      Attempt to fix ext/spl/tests/bug67359.phpt broken by f323baa845b51e00e8116bc55fa40400a0f70e44
      Fixed macros
      Set expectations
      micro-optimization
      Fixed unintended string duplication
      Extend ZEND_HASH_FILL_* API with ZEND_HASH_FILL_GROW and use it to optimize get_declared_classes()
      Use ZEND_HASH_FILL_* API for explode()
      Use zend_hash_append*() in zend_fetch_debug_backtrace()
      unserialize() optimization
      Fast Class Cache
      Prevent call of var_push_dtor_value() on hot path.
      Avoid destructor call for LONG keys
      Use Fast Class Cache to speedup object unserialization
      Use Fast Class Cache
      Don't evalutae ZEND_AST_CLASS_CONST to ZEND_AST_CONSTANT ar
      Use fast class cache
      Call zend_generator_check_placeholder_frame() only for frames with
      Initialize fast class cache
      Stop inserting fake frames on VM stack.
      Keep fci->object unchanged
      Better support for cross-compilation
      Fixed use-after-free introduced by ca49e53670631ed9754810d7ec6d56ede0d06cca
      Fixed possible incorrect assumption if constant is a power of 2.
      Fixed incorrect error message
      Remove useless masking
      Fixed CPU detection
      JIT class methods only when class entry is completely persistent.
      Fixed tracing JIT + preloading failures:
      DynASM/x86: Fix x64 .aword refs. Add .qword, .quad, .addr and .long.
      Fixed possible use after free
      Fixed indirect variable access detection when opcache.jit=1252
      JIT/x86: disable register allocation for expected ++/-- overflow case.
      Fixed JIT failure after overflow detection (bench.php failure in 32-bit
      Replace --SKIPIF-- by --EXTENSIONS--
      JIT/AArch64: INIT_FCALL and DO_FCALL support for optimized function code-generation (1204/1205)
      Replace "brk #0" with "NIY" (Not Implemented Yet) macro
      Use NIY_STUB instead of NIY in stubs
      Avoid useless "flags" byte extraction (it was inspired by unsuitable x86
      Trmporary disable PROFITABILITY_CHECKS for better test coverage
      Added tests for ASSIGN
      Support for most "uncommon" ASSIGN cases
      Support for missed case in zend_jit_tail_handler().
      Support for IS_LONG SUB and XOR.
      Support for bitwise operations with the same operands ($a ^ $a)
      Support for bitwise operations with non-integer arguments
      Support for RECV/RECV_INIT
      Support for passing extra arguments.
      Support for most cases of BOOL/BOOL_NOT/JMPZNZ/JMP[N]Z_EX
      Support for DOUBLE math
      Support for LONG math (except of MUL overflow detection)
      Remove dead conditions
      Fixed possible incorrect assumption if constant is a power of 2.
      Support for INC/DEC
      Support for CONCAT
      Support for comparison opcodes
      Support for BOOL/BOOL_NOT with DOUBLE operand
      Fixed copy/paste error
      Support for IS_IDENTICAL/IS_NOT_IDENTICAL
      Support for FETCH_DIM* and ASSIGN_DIM (exception handling is incomplete)
      Don't use FPR1 for consistency with x86
      Fixed incorrect register usage
      Fixed copy/paste error
      Accurate RETVAL register usage
      Support for ISSET_DIM
      Support for ASSIGN_OP
      Support for ASSIGN_DIM_OP
      Support for SEND_VAL/SEND_VAR/SEND_REF/CHECK_FUNC_ARG/CHECK_UNDEF_ARGS
      Support for more cases in INIT_METHOD_CALL, DO_FCALL* and RETURN
      Get rid of some NIY traps in DynADM macros
      Support for ECHO with non-constant operand
      Support for missed IS_NOT_IDENTICAL cases
      Support for FREE and FE_FREE
      Support for DEFINED
      Support for STRLEN and COUNT
      Support for moving between allocated registers
      Support for FE_RESET and FE_FETCH
      Fixed reference-countoing. Use 32-bit registers.
      Support for FETCH_CONST
      Support for TYPE_CHECK
      Support for BIND_GLOBAL
      Support for FETCH_THIS, FETCH_OBJ, ASSIGN_OBJ and ASSIGN_OBJ_OP
      Get rid of testing NIY_STUBs
      Support for PRE/POST_INC/DEC_OBJ
      Get rid of NIY in spill code
      Support for VERIFY_RETURN_TYPE, ISSET_ISEMPTY_CV, IN_ARRAY and ADD with
      Implement exceptional stubs
      Get rid of NYI in call/return sequences
      Temporary diable JIT for SWITCH and MATCH instructions (SWITCH should
      Fixed INC/DEC_PROP (tests/classes/incdec_property_*.phpt)
      Fixed load of incorrect size
      Fixed map_ptr resolution
      Fixed compilation warnings
      Support for interupts
      Fixed type check
      Wrong register
      Fixed condition and avoid usage of non-temporary registers
      Disable unsuitable optimization
      Fixed incorrect efree()
      Create C call frames for helper functions that perform nested calls
      Fixed type checks and return value handling
      Added missed UNDEF_OPLINE_RESULT
      typo
      Duplicate return
      Missed instruction
      Make bit helpers to be inline
      Use "red zone" for HYBRID VM.
      Disable "red zone" usage (it leads to crashes).
      Support for ZTS
      Enable register allocator (it was disabled because ZREG_NUM wasn't
      Fixed some compilation warnings
      Implement obvious trace side exits
      Fixed incorrect register usage
      Implement trace patching
      Fixed assertion
      Support for tracin JIT (incomplete, but abble to run Zend/bench.php)
      Support for tracing JIT
      Fixed register allocation.
      Attempt to fix Windows build
      ZREG_REG0 is not available in x86 build
      Use TST_32_WITH_CONST macro
      Remove useless SAFE_MEM_ACC_WITH_UOFFSET*
      Fixed signed/unsigned comparison mess
      Moved tests from ext/opcache/tests/jit/arm64 to ext/opcache/tests/jit
      Fixed signed/unsigned comparison mess and add one missing case
      Temporary disable PROFITABILITY_CHECKS for better test coverage and to
      Skip 64-bit related tests on 32-bit platforms
      Don't optimize MUL into SHIFT if we have to check for overflow
      Improve code for MUL overflow detection (less instructions and less
      Optimize AArch64 code generator
      Introduce CMP_64_WITH_CONST/CMP_64_WITH_CONST_32/CMP_32_WITH_CONST macros
      Introduce ADD_SUB_64_WITH_CONST/ADD_SUB_64_WITH_CONST_32/ADD_SUB_32_WITH_CONST macros
      Use less temporary registers
      Use single instruction
      Imroved code for CV initialization
      Imroved code for constants loading
      Use B/BL intead of BR/BLR if possible
      Fix compilation warning
      Use proper macro
      'lea' -> 'add'
      Fixed profile based JIT (opcache.jit=1225)
      Fixed JIT failure on Zend/tests/bug43175.phpt ZTS build, CALL VM.
      Fix compilation warnings
      Use better code for prologue and fix code generaion for "return -1".
      Peephole Code Optimization:
      Fixed incorrect stack size calculation (sizeof(zval) == 16)
      Fixed incorrect range check (missed sign bit)
      Reenable PROFITABILITY_CHECKS
      Implemented AArch64 support for GDB/JIT interface.
      Fixed JIT memory usage debug info (opcache.jit_debug=0x200)
      Allow to print JIT assemble without binary addresses (opcache.jit_debug=0x001) and with (opcache.jit_debug=0x401) for both ARM and x86.
      Remove unused TMP4. Use intra-precedure call scratch registers for TMP2 and TMP3.
      Use better code for trace exits. Don't store CPU registers that can't be used by deoptimizer.
      Use symbolic labels for BL and ADR instructions
      Fixed ZTS build.
      DynASM/ARM64: Add abiulity to plug-in generation of veneers to perform long jumps.
      Generate veneers to perform long jumps.
      JIT/AArch64: disable register allocation for expected ++/-- overflow case.
      Fixed format specifier
      Fix "store to misaligned address" ASAN warnings
      Fixed possible failure when repair after overflow detection
      Remove unnecessary #ifdef
      Fixed zend_long_is_power_of_two/zend_long_floor_log2 mess
      Correct DWARF frame description.
      Introduce and use ZEND_JIT_TARGET_X86 and ZEND_JIT_TARGET_ARM64 macros.
      JIT/AArch64: Rename B_IMM26 into B_IMM.
      DynASM/ARM64: Fixed incorrect ADRP instruction encoding
      JIT/AArch64: Use ADR/ADRP if it makes sense
      JIT/AArch64: Combine ADRP+ADD+LDR into ADRP+LDR
      DynASM/ARM64: Fixed incorrect ADRP instruction encoding (-4 => +4)
      JIT/AArch64: Fixed code alignment
      JIT: Don't include zend_jit_trace_info.jmp_table_size into zend_jit_trace_info.code_size
      JIT/AArch64: Link traces through exit tables.
      JIT/AArch64: Fixed DWARF frame description for helper stubs
      JIT/AArch64: Fixed incorrect MEM_LOAD usage
      Merge branch 'PHP-8.0'
      Fixed 32-bit x86 disassembler
      Fixed Zend/tests/type_declarations/union_types/incdec_prop.phpt failure
      Fix register save/restore around calls. (This fixes ext/opcache/tests/jit/fetch_dim_rw_001.phpt with -d opcache.jit=1202 without PROFITABILITY_CHECKS)
      DynASM/ARM64: Fix ADRP encoding with absolute address.
      Fix edge cases in JIT for ASSIGN_DIM_OP.
      Fix edge cases in JIT for ASSIGN_DIM_OP.
      Fixed ARM64 JIT build
      Resolve CG(map_ptr_base) in disassembler
      Separate common code
      JIT Refactoring:
      "http://" -> "https://"
      JIT/AArch64: Improved code generation for SL/SR and register allocation (#7096)
      JIT/AArch64: Use LSL instruction (DynAsm was fixed by
      JIT/AArch64: Complete logical_immediate_p() using DynAsm helpers
      JIT/AArch64: Use only reserved TMP registers for EG(jit_trace_num) assignment.
      JIT/AArch64: Use only reserved TMP registers for EG(vm_interrupt) checks.
      JIT/x86: Reuse code when MOD is going to be converted to AND.
      JIT/ARM64: Improve JIT for MOD instruction.
      JIT/ARM64: Remove redundand x86 specific optimization for recursive calls
      Typo
      Fixed bug #81096: Inconsistent range inferece for variables passed by reference
      Functions with static variables are not separated anymore.
      Reorder conditions and always mark methods in SHM as ZEND_ACC_IMMUTABLE
      Fix assertions
      Fixed incorrect map_ptr slots counting
      JIT: Avoid too aggressive loop unrolling
      JIT/ARM64: Fixed "may be used uninitialized" compilation warning
      JIT/ARM64: Fixed possible incorrect register allocation
      Move the whole "cold" path into the "cold" function.
      JIT/ARM64: Fixed possible incorrect exception catching in function JIT.
      JIT/ARM64: Fixed incorrect trace linking.
      FFI::CType reflection API
      Fixed bug #81256 (Assertion `zv != ((void *)0)' failed for "preload" with JIT)
      Fixed test
      Fixed test
      JIT: avoid $this check in closures called from methods
      Improve Range Inference
      Optimize "$x * 2" into "$x + $x"
      Make private functions "static" and remove unused zend_inference_check_recursive_dependencies().
      Implement range inference for traces
      Use ZEND_HASH_FILL_* API.
      Eliminate "h < ht->nNumUsed" check in zend_hash_next_index_insert_new()
      JIT: Use zend_hash_index_lookup() instead of zend_hash_index_add_new(EG(uninitialized_zval))
      Fixed incorrect condition
      Fixed conditional jump on uninitialised value (Zend/tests/match/028.phpt failure with function JIT)
      Better specialization for packed/hash arrays

Dusk (1):
      Add array_is_list(array $array) function

Dylan T (1):
      zend_compile.c: fix typo

Florian Engelhardt (1):
      Create filter_null_on_failure.phpt 

Florian Sowade (1):
      Add dependency tracking for header files

Frago9876543210 (1):
      Fixed failed test in extension skeleton

Gabriel Caruso (3):
      Prepare for PHP 8.1
      [ci-skip] Use HTTPS for links on PHP ini files
      Replaced deprecated `hw.ncpu` with `hm. logicalcpu`

Ganesh Kandu (1):
      Fix typedef redefinition warnings.

George Peter Banyard (119):
      Fix [-Wduplicated-cond] in MBString extension
      Fix [-Wduplicated-cond] in MySQLnd driver
      Fix [-Wduplicated-branches] in CLI SAPI
      Fix [-Wlogical-op] in IMAP
      Suppress bogus [-Wlogical-op] warning from GCC
      Add -Wno-logical-op compiler flag to Sodium extension
      Add compiler flags which aren't included in -Wall or -Wextra
      Modernize IMAP tests
      Make all IMAP fetch*() tests conflict with the default mailbox
      Fix parallel testing for IMAP
      Stabalize IMAP parallel testing, again
      Convert IMAP resource to object
      Add IMAP resource to object conversion to UPGRADING
      Optimize Dovecot configuration for IMAP tests
      Make imap_errors() test no hang
      EXPECTF imap_errors() test's authentication error
      Update hash for IMAP stubs after adding final qualifier
      Remove superfluous return statement.
      Implement Explicit octal notation for integers RFC
      Convert strcmp() usage to zend_string_equals_literal()
      Add/expand comments for PDO handlers
      Formalize pdo_dbh_check_liveness_func() return type to zend_result
      Boolify PDO's transaction handlers
      Boolify PDO's set_attribute driver function
      Boolify PDO's quoter handler
      Voidify PDO's closer handler
      Boolify PDO's preparer handler
      Voidify PDO's fetch_error handler
      Update UPGRADIN.INTERNALS
      Refactor PDO's quoter handler to return a zend_string
      Refactor PDO placeholder's quoted string to zend_string
      [skip-ci] Add minimal build instruction for Fedora
      Refactor PDO doer handler to use zend_string
      Refactor PDO's last inserted ID handler to use and return zend_string
      Remove unnecessary (char*) casts
      php_pdo_register_driver() might fail
      Use standard C99 64bits int types
      Use zend_string_equals() in PDO
      Remove usage of float keys in arrays
      Remove quicktester
      Use zend_string* & more legible API for php_get_display_errors_mode()
      Remove php_pdo_str_tolower_dup() function
      Voidify internal pdo_sqlstate_init_error_table()
      Boolify pdo_stmt_describe_columns()
      Boolify pdo_hash_methods()
      Boolify pdo_dbh_attribute_set()
      Add comment explaining empty default case
      Validate string is numeric for integer PDO attribute value
      Use standard PDO way for fetching integer attribute values
      Add API to fetch bool value for PDO attribute values
      Use zend_string_equals() API instead of strcmp() in main.c
      Use zend_string_equals() API instead of strcmp() in SOAP extension
      Use zend_string_equals() API instead of strcmp() in PGSQL extension
      Use zend_string_equals() API instead of strcmp() in Filter extension
      Use zend_string_equals() API instead of strcmp() in Date extension
      Use zend_string_equals() API instead of strcmp() in COM extension
      Use zend_string_equals() API instead of strcmp() in various places
      Drop unneessary if branch and adjust arg_num type
      [skip-ci] Update UPGRADING documents for the new argument for fputcsv()
      Align types with the output of zend_hash_num_elements()
      Fix necessary extensions list for OPcache test
      Add missing break; in Zlib extension
      Introduce pseudo-keyword ZEND_FALLTHROUGH
      Use zend_string_equals_(literal_)ci() API more often
      Refactor SNMP extension a bit
      Refactor dom_has_feature() to use zend_string*
      Fix SNMP
      Signal that the stream option passed is an error
      Use ZEND_FALLTHROUGH instead of a comment in PDO
      Drop -Wno-implicit-fallthrough compiler flag
      Fix test output due to float to string locale independent change
      Boolify _php_pgsql_detect_identifier_escape() and rename it
      Boolify _php_pgsql_link_has_results()
      Use ZEND_NUM_ARGS() explicitly
      Use ZEND_ASSERT() instead of plain assert()
      ValueError if lengths is less than 0
      Formalize return type to zend_result for PGSQL_API functions
      Boolify do_exec()
      Refactor PGSQL extension to use zend_string*
      Introduce zend_error_unchecked()
      Convert IMAPConnection to IMAP\Connection
      Refactor php_date_initialize_from_hash()
      Throw directly instead of replacing error handler in ext/date (#6954)
      Remove unnecessary error handler replacement in SPL
      Refactor register_tick_function mechanism (#5828)
      Refactor register shutdown function mechanism
      Use uint32_t for number of variadic arguments in ZPP
      Mark various functions with void arguments.
      Do not reuse errno as local variable name
      Use standard function declaration style instead of K&R in libbcmath
      Use standard function signature instead of K&R in Intrl extension
      Specify function pointer signature for scanf implementation
      Fix [-Wstrict-prototypes] warning in PCNTL extension
      Fix remaining [-Wstrict-prototypes] warnings
      Add -Wstrict-prototypes compiler warning
      Remove 'register' type qualifier (#6980)
      Use zend_string_equals_* API in a couple of more place
      Fix test expectation now that -a doesn't work without readline
      Use equals OR equal instead of >= && <=
      Implement "Deprecate implicit non-integer-compatible float to int conversions" RFC. (#6661)
      Refactor spl_array_has_dimension_ex()
      Add proper EXTENSIONS section for tests in Zend/
      Refactor SplFixedArray (#7168)
      Fix deprecated float to int tests
      Pure Intersection types (#6799)
      Deprecate using the implicit default PgSQL connection
      Use standard bool type instead of bool_int
      Use standard bool type instead of boolean_e
      Remove unused macro
      Refactor conversion function
      Use standard 64bit unsigned int type
      Use standard 64bit signed int type
      Drop register keyword
      Make syslog() binary safe
      Fix bug pointed out in feature request 81268
      Fix intersection types being nullable via implicit forced nullability
      [skip-ci] Fixup UPGRADING documents
      [skip-ci] Fix comments and UPGRADING.INTERNALS for zend_type changes
      Refactor proc_open() implementation (#7255)

Hao Sun (77):
      Initial support of JIT/arm64
      Support failed JIT test case: assign_002.phpt
      Support failed JIT test case: assign_010.phpt
      Support failed JIT test case: assign_012.phpt
      Support failed JIT test case: assign_027.phpt
      Support failed JIT test case: assign_024.phpt
      Support failed JIT test case: assign_022.phpt
      Support failed JIT test case: assign_025.phpt
      Support failed JIT test case: assign_026.phpt
      Support failed JIT test case: assign_dim_op_001.phpt
      Support failed JIT test case: assign_dim_002.phpt
      Support failed JIT test case: assign_static_prop_001.phpt
      Support failed JIT test case: assign_036.phpt
      Support failed JIT test case: assign_035.phpt
      Support failed JIT test case: fetch_dim_func_args_001.phpt
      Support failed JIT test case: fetch_dim_r_002.phpt
      Support failed JIT test case: fetch_dim_rw_001.phpt
      Support failed JIT test case: fetch_obj_004.phpt
      Support failed JIT test case: fetch_obj_002.phpt
      Support failed JIT test case: fetch_obj_003.phpt
      Add necessary assertions on range for INIT_FCALL and DO_FCALL
      Fix one bug in macro IF_GC_MAY_NOT_LEAK
      Support failed JIT test case: fetch_obj_001.phpt
      Support failed JIT test case: cmp_001.phpt
      Support failed JIT test case: cmp_002.phpt
      Support failed JIT test case: cmp_004.phpt
      Support failed JIT test case: cmp_003.phpt
      Support failed JIT test case: shift_left_001.phpt
      Support failed JIT test case: shift_left_002.phpt
      Support failed JIT test case: shift_right_001.phpt
      Support failed JIT test case: shift_right_003.phpt
      Support failed JIT test case: mod_001.phpt
      Support failed JIT test case: send_ref_001.phpt
      Support failed JIT test case: send_val_001.phpt
      Support failed JIT test case: send_var_ex_001.phpt
      Support failed JIT test case: jmpz_001.phpt
      Support failed JIT test case: jmpz_ex_001.phpt
      Support failed JIT test case: reg_alloc_003.phpt
      Support failed JIT test case: reg_alloc_002.phpt
      Updates for commits between 121a0f7 and 12dcf34
      Remove the duplicate macro DOUBLE_GET_ZVAL_DVAL
      Revisit the encoding of immediate
      Support LONG MUL with overflow detection
      Optimizing LONG MUL to SHIFT: refine the trigger condition and add overflow detection
      Remove the TODO comments for DOUBLE CMP
      Support failed test case: switch_jumptable.phpt
      Fix the encoding of immediate for logical instructions
      Add the helper to check whether an immediate is valid for logical instructions
      Remove the unnecessary 'bvs' check for IS_NOT_IDENTICAL case
      Optimizing LONG MUL to SHIFT: add overflow detection for x86
      Support ZEND_JIT_ON_PROF_REQUEST mode
      Support ZEND_JIT_ON_HOT_COUNTERS mode
      Fix incorrect macro LDR_STR_PIMM
      Add the missing parts for macros ZVAL_COPY_CONST and ZVAL_COPY_CONST_2
      Revisit 32-bit logical operations with constants
      Don't use TMP3 except ZTS
      Use ADD_SUB_IMM for macros ADD_SUB_*_WITH_CONST*
      Use macros CMP_*_WITH_CONST if possible
      Remove the deprecated macros
      Improve macro LONG_ADD_SUB_WITH_IMM
      Use fewer temporary registers if possible
      Fix commit 6e344ed: temporary register should be kept for GET_ZVAL_LVAL
      Revert the macro uses for Z_TYPE_P(val) in commit 1fff62b
      Fix commit 8143a49: macro ADD_SUB_64_WITH_CONST_32 should be used
      JIT/AArch64: Fix typo in commit dc0e259 (#7021)
      JIT/AArch64: [macos] Fix arguments to variadic function (#7023)
      JIT/AArch64: [macos][ZTS] Support fast path for tlv_get_addr (#7042)
      JIT/AArch64: Use D registers for floating-point operations (#7080)
      JIT/AArch64: Use ZR directly to zero FP register (#7081)
      JIT/AArch64: Code refactoring for macros (#7082)
      JIT/AArch64: [macos] Remove Clang warning due to -Wincompatible-pointer-types (#7098)
      JIT/AArch64: Optimize add+ldr to ldr (#7109)
      JIT/AArch64: Use 'shifted register' if available (#7108)
      JIT/AArch64: Fix codestyle issues (#7125)
      JIT/AArch64: Use 'tbnz/tbz' to check the signedness (#7123)
      JIT/AArch64: Support shifted immediate (#7165)
      Fix a typo in function execute_ex (#7315)

Himanshu (1):
      Exclude more text-only paths from azure pipelines (#6876)

Ilija Tovilo (3):
      Add tokenizer_data_gen to build process
      Implement enums
      Add enums to UPGRADING [ci skip]

Jakub Zelenka (10):
      Bump minimal OpenSSL version to 1.0.2
      Fix indent in FPM openmetrics status
      Upadate NEWS and UPRADING with info about FPM openmetrics format addition
      Update NEWS for FPM process renaming on macOS
      Fix types in FPM status openmetrics format
      Do not check exact values of unstable metrices in FPM status test
      Add extra run test for pm.max_spawn_rate
      Update NEWS and UPGRADING for FPM addition of pm.max_spawn_rate
      Sync the FPM openmetrics status with php-fpm_exporter
      Make CertificateGenerator not dependent on external config in OpenSSL 3.0

Jan-E (1):
      Windows: allow GD ext without avif.dll

Janakarajan Natarajan (1):
      Use arm64-graviton2 on Travis (#7016)

Javier Eguiluz (3):
      Fix some typos (#7320)
      Fix some mismatches in preprocessor directive comments
      Remove a redundant expression

Jeremy Mikola (1):
      Include class name in Serializable deprecation message

Joe Watkins (36):
      update release process doc (#6829)
      Revert "Exclude more text-only paths from azure pipelines (#6876)"
      exclude markdown
      ReflectionFunctionAbstract::getClosureUsedVariables
      note in upgrading for b227a722859e83fdba230f746477f6322ae33609
      fix stub for pcntl_rfork
      Fix bug #24214 implement access to skip_last in user API for backtrace
      fix optimizer pass registration test
      Revert "Fix bug #24214 implement access to skip_last in user API for backtrace"
      move zend_vm_stack_new_page into header for sharing with fibers
      ditch function from zend_fiber
      drop phpdbg web helper extension and wait command (#7144)
      fix news
      Set BUILD_CC for phpize
      ditch remote
      Fix #81135 unknown help topic in phpdbg fails assertion
      Fix #81136 opcache header not installed, causing shared build to fail
      Revert "hrtime implementation update for Mac"
      reset blocking state on init
      Adds zend_fiber_startup at the right stage, moves setting of switch hooks
      remove specialized printing from phpdbg (#7156)
      Fix bug #81163 __sleep allowed to return non-array
      missing news/upgrading entry
      Fix #81202 powerpc64 build fails on fibers
      Fix bug #81200 ReflectionMethod::isStatic belongs on ReflectionFunctionAbstract
      replace phpdbg custom opcode dumper with O+ dump (#7227)
      Fix bug #81237 comparison of fake closures doesn't work
      Add first-class callables
      Not serializable flag permeation
      Drop serial denier functions
      drop unused header in fibers
      more fiber notifications (#7293)
      Extend resource reservation to Fibers (#7292)
      Fix bug #81303 improve match errors
      Drop TsHashTable (#7351)
      Fix bug #81280 refuse to allow unicode chars in prompts

Josh Soref (1):
      Fix spelling and grammar mistakes

Juliette (1):
      UPGRADING: update information re: return type for internal methods (#7182)

K (5):
      SplHeap: replace zend_parse_parameters with ZEND_PARSE_PARAMETERS* macros
      SplPriorityQueue performance improvements (#6859)
      Speed up array_column for consecutive objects of the same class
      Simplify unpack logic (#6908)
      Optimize unpack() for named fields (#6958)

Kamil Tekiela (22):
      Fix typos in fetch_all error message
      Remove unused properties in mysqlnd (#6849)
      Deprecate unused mysqli constants (#6850)
      Mysqli bind in execute (#6271)
      Silence the deprecation notice on var_dump
      Add ZEND_ASSERT to stmt->errorCode
      Add test case for errorCode()
      Implement mysqli_fetch_column (#6798)
      Add error reporting to mysqli_options (#7036)
      Fix typo, there is no MySQL 8.2.10
      Fix libmysql test cases (#7097)
      Fix broken test due to missing skipif.inc
      optimize skip condition for the test
      Sccp new functions for ct (#7220)
      Deprecate autovivification on false
      Remove wrappers for *printf functions (#7313)
      Remove mysqlnd_field_type_name
      Remove get_parameter_metadata
      Drop mysqlnd statistics triggers
      Fix typo [no-ci]
      Fix typos (#7327)
      Replace macro with inline function (#7365)

Kennedy Tedesco (1):
      Use ZVAL_TRUE() directly

KsaR (1):
      Update http->https in license (#6945)

Levi Morrison (8):
      Remove very old -no-cpp-precomp compatibility flag on Mac
      Fix ubsan error on Mac
      Skip invalid file descriptor test on Mac
      Document .dtor_obj and .free_obj
      Sort some decls in spl_iterators.h
      Add const to zend_extension_version_info.build_id
      Revert "Revert "Revert "[skip-ci] Fix typo"""
      Remove leading underscore for _zend_hash_find_known_hash (#7260)

Marco Pivetta (1):
      Make ReflectionProperty/Method always accessible

Mark Gallagher (1):
      run-tests: Fix warning when specifying xdebug as a required extension

Markus Staab (1):
      Fix typo [ci skip]

Martin Schröder (7):
      Alternative Fiber Internals Refactoring (#7101)
      Add fiber type to better support custom fiber APIs (#7105)
      Unify control & data transfer between fibers (#7120)
      Destroy previous fiber context in trampoline as needed (#7143)
      Do not expose fiber VM state management (#7170)
      Flexible fiber bailout handling (#7163)
      Implemented Fiber GC handler

Matt Brown (1):
      Implement never return type

Matteo Beccati (1):
      Fix test on non-UTC setups

Max Semenik (14):
      run-tests.php: move JUnit stuff into a class
      run-tests: fix JUnit counts
      Remove stray mentions of mbstring.func_overload
      CI: add --depth 1 to git clone for speed
      run-tests: add skip cache
      run-tests: drop support for ancient Valgrind versions
      Fix E_DEPRECATED in zend_vm_gen.php
      Update mysqli tests to work with newer MySQL server
      run-tests.php: class for test file loading
      run-tests: use the EXTENSIONS section for skipping
      Migrate skip checks to --EXTENSIONS--, p1
      Migrate skip checks to --EXTENSIONS--, p2
      Migrate skip checks to --EXTENSIONS--, p3
      Migrate skip checks to --EXTENSIONS--, p4

Meletis Flevarakis (1):
      Verify exception on ZipArchive::getExternalAttributesName when $name is empty (#7230)

Michael Voříšek (5):
      Remove spaces around version built type
      Remove no longer used "log_errors_max_len" ini directive (#6838)
      Remove no longer used "log_errors_max_len" ini directive (#6838)
      Remove randominess from spl_object_hash
      Fix typo in enum test (#7368)

Mike Pall (6):
      DynASM/ARM64: Add VREG support.
      DynASM: Fix global label references
      DynASM/ARM64: Add .long expr. Add .quad/.addr expr + refs.
      DynASM: Bump version to 1.5.0.
      DynASM/ARM64: Fix LSL/BFI* encoding with variable shifts.
      DynASM/x86: Add missing escape in pattern.

Máté Kocsis (85):
      Add support for generating class entries from stubs
      Generate class entries for a few extensions
      Generate class entries from stubs for another batch of extensions
      Implicitly enable function entry generation when class entry generation is enabled
      Generate ext/intl class entries from stubs
      Remove a few more unnecessary @generate-function-entries annotations
      Enable class entry generation for sapi extensions
      Generate zend class entries based on stubs
      Generate class entries from stubs for oci8, odbc, openssl, pcntl, pdo, pgsql
      Generate class entries from stubs for phar, posix, pspell, readline, reflection, session, shmop
      Generate class entries for snmp, soap, sockets, sodium, sqlite3, sysv*, tidy
      Improve class entry generation
      Generate class entries from stubs for ldap, libxml, mbstring and mysqli
      Add support for generating properties with union type of multiple classes
      Generate ext/spl class entries from stubs
      Generate class entries from stubs for com, standard, xmlreader, xmlwriter, xsl, zip, Zend
      Declare XMLReader properties
      Fix bug #80816 Document the removal of alias class entries from ext/spl
      Use typed properties in ext/mysqli
      Promote DOM invalid state errors during property access
      Declare PDORow::queryString property
      Update mysqli stub hash
      Convert resources to objects in ext/ldap
      Update mysqli arginfo hash
      Use typed properties in ext/curl
      Use typed properties in php_user_filter
      Use typed property in RegexIterator
      Use typed property in PDOException
      Get rid of private final methods (#6892)
      Make some exception properties typed
      Use typed properties in ext/zip
      Add reproducer for possible issue with object return type inheritance (#6961)
      Convert resources to objects in ext/pgsql
      Add support for tentative return types of internal methods
      Declare SNMP properties
      Declare dynamic properties in ext/dom
      Declare tentative return types for ext/reflection
      Declare tentative return types for ext/xmlreader
      Declare tentative return types for ext/xmlwriter
      Declare tentative return types for ext/xsl
      Declare tentative return types for ext/pdo
      Declare tentative return types for ext/tidy
      Declare tentative return types for ext/simplexml
      Declare tentative return types for ext/sqlite3
      Update mysqli stub hash
      Declare tentative return types for ext/soap
      Declare typed properties in ext/dom
      Declare tentative return types for ext/curl
      Declare tentative return types for ext/fileinfo
      Fix the signature of ini_alter()
      Do not verify the signature of ReflectionEnumUnitCase::getValue()
      Declare tentative return types for ext/mysqli (#6998)
      Remove unnecessary return doc comment from PDOStatement::errorInfo()
      Declare tentative return types for ext/json (#7051)
      Declare tentative return types for ext/zip (#7053)
      Promote "Session is not active" warning to exception
      Declare tentative return types for ext/session (#7005)
      Declare tentative return types for ext/snmp
      Declare tentative return types for ext/phar (#7052)
      Declare tentative return types for ext/oci8 (#7070)
      Declare tentative return types for ext/standard (#7065)
      Mention ReturnTypeWillChange attribute in the error message (#7183)
      Declare tentative return types for ext/intl (#6986)
      Add support for final class constants
      Declare tentative return types for ext/spl - part 1 (#7115)
      Declare tentative return types for ext/spl - part 2
      Add support for the never type in gen_stub.php
      Declare the $value param of define() as mixed
      Declare tentative return types in ext/spl - part 3 (#7239)
      Deprecate oci8.old_oci_close_semantics (#7258)
      Declare tentative return types for Zend (#7251)
      Fix some smaller formatting inconsistencies in stubs
      Actually, abstract methods don't have a body
      Declare tentative return types for ext/dom (#6985)
      Indent stubs inside global namespace blocks (#7261)
      Use single line phpdoc in stubs where possible
      Migrate to PHP-Parser 4.12.0 and regenerate some arginfos
      Add support for generating readonly properties via stubs (#7297)
      Fix oci8.old_oci_close_semantics deprecation is always displayed
      Display the readonly property modifier when printing reflection info
      Validate that promoted readonly properties have a type
      Improve class inheritance error messages (#7307)
      Add support for generating classynopses from stubs
      Fix another DOMNameSpaceNode casing issue
      Add support for replacing class synopses based on stubs (#7340)

Nikita Popov (657):
      Add scheduled builds to yaml pipeline
      Add GC support for PDO driver data
      Sanity check zpp max argument count
      Remove unused global
      Don't use global for array_walk_fci
      Add zend_accel_error_noreturn() helper
      Use zend_accel_error_noreturn in more places
      Don't allow properties on former resource objects
      Remove unused single.leaf member
      Remove unused pasv_listen() function
      Accept zend_string in highlight_string API
      Fix zpp for GdFont|int
      Use ephemeral port in ftp tests
      Fix pasv_port determination
      Use ephemeral port in more server tests
      Allow running session tests in parallel
      waitpid in ftp server tests
      Remove dated results from ext/hash/bench.php
      Check for null dbh methods in get_gc
      Add --repeat testing mode
      Use pkg-config for libargon2
      Don't pass null to strlen()
      Determine run-tests executables consistently
      Don't try to open null file
      Ensure consistent error message in phpdbg parser
      Don't disable phpdbg on macos
      Increase timeout on msan job
      Fix signed/unsigned warnings in PDO ODBC
      Allow building dblib with machine-dependent libdir
      Fix MHANDLEFUNC signature
      Fix compile warnings in PDO Firebird
      PDO: Store/pass query_string as zend_string
      MySQLnd: Remove fail thresholds from infallible allocators
      MySQLnd: Remove some unnecessary allocator failure checks
      Remove MYSQLND_STRING_TO_INT_CONVERSION define
      Remove more OOM checks
      mysqlnd_error_info_init() cannot fail
      Use zmm for row_c data
      MySQLnd: Remove unused fetch_field_data method
      Remove mysqlnd_extension enum
      MySQLnd: Simplify management of zval row buffer
      MySQLnd: Drop free_result_internal
      Fix ATTR_ORACLE_NULLS with PARAM_ZVAL
      Drop support for max_length in mysqli_fetch_fields()
      MySQLnd: Clean up and optimize mysqlnd result set handling
      PDO MySQL: Use native types for results
      MySQLnd: Avoid some reallocations in PS decoder
      MySQLnd: Fix potential leak when reading cursor
      MySQLnd: Remove mnd_malloc/free etc.
      PDO MySQL: Use correct type when setting INT_AND_FLOAT_NATIVE
      PDO MySQL: Make test libmysql compatible
      Make mysqli_stmt_next_result available under libmysql
      Move fetch_all implementation out of mysqlnd
      Add basic libmysqlclient CI job
      Try to fix azure pipelines config
      Remove unused pdo_pgsql_column member
      Remove unused smax member from memory stream
      Back memory stream by a zend_string
      Fix leak
      PDO: Honor ATTR_STRINGIFY_FETCHES for booleans
      Build PDO odbc on azure
      PDO Firebird: Fix uninitialized var warning
      Show slow SKIPIF sections as well
      Build PDO Firebird on Azure
      Suppress zend_signals warnings if pdo_firebird loaded
      PDO Firebird: Use recreate table
      Fix bug_69356.phpt for firebird
      Add CONFLICTS file for PDO firebird tests
      Don't use explicitly nullable column in bug_73234.phpt
      Rewrite PDO result binding
      Support native types in PDO SQLite
      Skip tests under asan
      Export php_getenv() API
      Use single typedef for curl callbacks
      Don't allocate php_curlm_handlers separately
      Don't allocate php_curl_handlers separately
      Remove unused still_running member
      Remove method member from php_curl_callback
      Manually store CURLOPT_PRIVATE data
      Fix curl_getinfo() funcinfo
      Fix lexing of zero octal followed by whitespace
      Fix use-after-scope in SplObjectStorage::unserialize()
      Restrict allowed usages of $GLOBALS
      Remove some INDIRECT handling in VM
      Remove some INDIRECT handling in standard library
      Remove unnecessary INDIRECT checks in JIT helpers
      Fold dirname in sccp for non-windows platforms
      Remove freeq member
      Switch bound_param_map to zend_string
      Switch name variable to zend_string
      Remove some unnecessary zend_delete_global_variable uses
      Fuzzer: Gracefully handle hashes that cannot be serialized
      Remove unused bind_hash member
      Fix INDIRECT elements leaked by SPL __serialize implementations
      Remove SEPARATE_ARG_IF_REF macro
      Remove SEPARATE_ZVAL_IF_NOT_REF() macro
      Remove Z_PARAM separate params where they don't make sense
      Make convert_to_*_ex simple aliases of convert_to_*
      Remove zend_locale_sprintf_double()
      Remove the convert_to_long_base function
      compare_function() returns zend_result
      Fix misleading indentation warning in pdo_oci
      Build PDO OCI and OCI8 on azure
      Print "interned" instead of fake refcount in debug_zval_dump()
      Replace zend_bool uses with bool
      Check for append to $GLOBALS
      Limit unserialization element count more aggressively
      Protect against buffer overflow in xxhash unserialization
      Fix $GLOBALS[] in isset and unset
      Fix memsize check for xxh32
      Remove redundant posix_getrlimit_basic.phpt
      gen_stub: Automatically add function name to exceptions
      gen_stub: Allow additional text after @return
      gen_stub: Compare phpdoc return type in --verify
      gen_stub: Don't use $aliasMap during verification
      gen_stub: Also verify implementation-alias
      Rename zend-test to zend_test
      Accept zend_string in zend_prepare_string_for_scanning
      Disable jit in observer opline test
      Improve error message for leading comma in keyed list assignment
      Fix parsing of semi-reserved tokens at offset > 4 GB
      Remove unnecessary TRUE/FALSE defines in tidy
      Add missing resource key warning for unset()
      Fix proptable canonicalization bypass in ArrayObject
      Remove unused mmap member in phpdbg_file_source
      Move optimizer into core
      Create .php and .sh on valgrind failure
      Skip two gettext tests under --repeat
      Add support for string keys in array unpacking
      Handle warnings during sccp function evaluation
      Allow all scalar types in ini_set()
      Deprecate passing null to non-nullable arg of internal function
      Revert "Implement fetching TLS TCB offset on MacOS"
      Used typed properties for reflection $name and $class
      Use typed proprety for Transliterator::$id
      Delref only after successful allocation
      Fix quadratic slowdown under asan in timelib
      Fix unused variable warning
      Avoid writing zend_vm_opcodes.h if it did not change
      Don't use unmangled name if property not found
      Initialize property to UNDEF on unserialize overwrite
      Fix static variable behavior with inheritance
      Fixed bug #75474
      Fixed bug #53826
      Fix crash during default value evaluation
      Fix closure GC handler for fake closures
      Don't resolve special class names
      Fixed bug #80761
      Remove resize_chunk API
      Remove free_chunk API
      Fix Windows build
      Allow pointer to end of memory in IS_UNSERIALIZED()
      Clarify types in XmlReader property handling
      Reference dynamic functions through dynamic_defs
      Fixed bug #80808
      Explicitly print re…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants