php-master-changes 2019-07-11

この日は opcache のバグ修正、循環参照 GC の最適化、JIT を SSE 必須にする修正、不要コードの削除、ビルドシステムのリファクタリング、テストの修正、AArch64 向けの crc32 と base64 の処理の最適化、run-tests.php の JUnit レポート出力の修正、ビルトイン Web サーバが Windows で SEGV を起こす問題の修正、Reflection::export() 周りの実装修正、proc_open() へのディスクリプタ指定でのリダイレクトと null のサポート追加があった！

# 2019-07-11
## nikic: Fix bug [#78271](https://bugs.php.net/bug.php?id=78271)
- https://github.com/php/php-src/commit/e7a83ec8dff962ea624508f18b9b10f5add030cc
- [7.3~]
- ext/opcache で、if-else が正常動作しなくなる問題の修正
- [smart branch](https://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html#smart-branches) の抑制に比較命令とジャンプ命令の間に NOP を挟んでおり、opcache の NOP 除去最適化でこれが削られないようにする判定を修正している

## dstogov: Set expectation to reduce hot code fragmentation
- https://github.com/php/php-src/commit/0e3d4911fae0b0f0adac7f5162780b3809c30456
- [7.4~]
- 循環参照 GC のコードで、EXPECTED を足してホットコードの断片化を抑制

## nikic: Drop support for JIT without SSE
- https://github.com/php/php-src/commit/cf7dd0028072738a4b70dfbb1fdf78abce29e88a
- ext/opcache/jit で、JIT サポートを SSE 必須にした

## petk: Remove TSRM/tsrm_config.w32.h
- https://github.com/php/php-src/commit/d63fdced2e9bc2aa6c0e07958b8991e7f222de50
- [7.4~]
- 不要ファイル TSRM/tsrm_config.w32.h の削除

## petk: Refactor undefining PACKAGE_* symbols
- https://github.com/php/php-src/commit/a6daded1a4b7d715d9b1585fe9df269ca73e2bac
- [7.4~]
- ビルドシステムで、PACKAGE_* の undef をリファクタリングし PHP_PATCH_CONFIG_HEADERS を用意

## nikic: Add server conflict to soap custom content type test
- https://github.com/php/php-src/commit/ba8c4894d8b1316e986c01789b3dd0c25108c689
- [7.4~]
- ext/soap で、テストの並列実行対策

## sebpop: [AArch64] Use crc32 instructions when available
- https://github.com/php/php-src/commit/2a535a9707c89502df8bc0bd785f2e9192929422
- [7.4~]
- AArch64 で使えるところは crc32 の処理に専用命令を使うよう修正

## sebpop: neon vectorization for base64
- https://github.com/php/php-src/commit/3b73c9fb8692a6ffc0f4cb6e66eb649871dfed34
- [7.4~]
- AArch64 で base64 の処理に NEON のベクトル化を使うよう修正

## nikic: Make proc_open_bug64438.phpt more robust
- https://github.com/php/php-src/commit/d20fc5a1927c98db7d4e96c17b9988569822592a
- proc_open_bug64438.phpt が運こけするのを修正

## nikic: Include test name in JUnit testcase name
- https://github.com/php/php-src/commit/c02dfddda3c4e267c99d301f5f042f36da50a658
- [7.4~]
- run-tests.php で、JUnit のレポート出力のテストケース名を修正

## cmb69: Fix [#78212](https://bugs.php.net/bug.php?id=78212): Segfault in built-in webserver
- https://github.com/php/php-src/commit/fa65f5ecf5d0539f15a3048bf8c073f4c262baf1
- [7.3~]
- sapi/cli で、ビルトイン Web サーバが Windows で SEGV を起こす問題の修正

## nikic: Don't call Reflection::export() internally
- https://github.com/php/php-src/commit/42cac9d7d7e5c82cf3565a33f3dd6c3d2c6b42d4
- [7.4~]
- ext/reflection で、[Reflection::export()](https://www.php.net/manual/ja/reflection.export.php) を別関数（Reflector::export() の各実装）の内部実装からも呼んでいた箇所を修正
- export() が中で何してるかというと __toString() を更に呼ぶことで、じゃあ直接 __toString() 呼んだ方よくね？みたいな
- このへん [7.4 での非推奨化でどうですかリストに入ってる](https://qiita.com/rana_kualu/items/dfb52b4ff639ae105fa4#reflection-export-methods)奴のような

## nikic: Support redirect+null descriptors in proc_open
- https://github.com/php/php-src/commit/6285bb52faf407b07e71497723d13a1b08821352
- [proc_open()](https://www.php.net/manual/ja/function.proc-open.php) で、ディスクリプタ指定でのリダイレクトと null のサポートを追加
- [先日追加された](https://qiita.com/sj-i/items/f57883e1a42227488811#nikic-add-support-for-proc_open-with-a-command-array)シェル通さない版で便利

## nikic: Switch to using shell-less proc_open() in various server tests
- https://github.com/php/php-src/commit/17f7fb76053cabe20225472debe4d1801221ef9f
- [7.4~]
- proc_open() 利用の各種テストをシェル通さない版での利用に切り替え

## Girgias: Convert short tag to standard tag in Zend test file
- https://github.com/php/php-src/commit/e6c2b288652cf9c8d0b92d2842d73b3eb2431860
- [7.4~]
- テストでショートタグ `<?` を使っていた箇所の修正