php-master-changes 2018-08-22

今日は急にコミット多くて

# 2018-08-22
## dstogov: Removed op_array->static_variables duplication code. They can't be "shared" during comilation.
- https://github.com/php/php-src/commit/e3bbfbe6a26272a21504a2fe5c5738bae017f032
- 静的変数のコンパイル時、静的変数テーブルのコピーを行っていたのを行わないよう修正
- 継承時、親クラスからの関数テーブルのコピーが発生
- 親クラスのメソッドが静的変数を持つ際、関数のコピーコンストラクタで静的変数テーブルをコピーするような実装が [1999 年に入った](https://github.com/php/php-src/commit/b996436b4cf20e43716cf5100537b5639623e4c4)
- このコードは後に zend_array_dup() を使うよう [2014 年に修正された](https://github.com/php/php-src/commit/9eb89dddb10b7d5b7aa97c04ffc9804cedb8ce04)
- その後、関数コピー時点では静的変数テーブルをコピーせず、lazy にコピーするような実装が [2015 年に入る](https://github.com/php/php-src/commit/d85113702cc6030a9149f518c55953ccb6933a7c)
- 実行時はともかくコンパイル時に親から引き継いだ関数の静的変数テーブルを触るようなことはない筈なので、なんとなく入れてたコンパイル時のコードからは抜いた、みたいな感じなのかな？

## dstogov: Stop using zend_function->reserved[] space.
- https://github.com/php/php-src/commit/8d95f561e45b5aee5398c772284bdeff03fbb475
- zend_op_array の reserved なる謎領域を使っていたのをやめた
- わりと[最近入ったような奴](https://github.com/php/php-src/commit/4418d61ca3275553a000c202d495102146b1fed9)かな

## devnexen: Don't report mmap failure if it is expected
- https://github.com/php/php-src/commit/446b5b15d324dacd30f58313563a9d625fb54ac8
- [昨日言ってた修正 PR の奴](https://qiita.com/sj-i/items/934ba9ce871a926e6850#devnexen-support-fixed-address-mmap-without-replacement)
- 親指立てといたもののモニョるところは、FreeBSD が EINVAL 出しちゃうので errno チェックしてもしょうがなくて、レポート黙らせるしかないところ（別要因の確保失敗時、とかもうどうしょうもない時な気はするけれども）

## nikic: Unify unpack checking in compile_special_func()
- https://github.com/php/php-src/commit/850b53df0e3aa1a898db000244290fd0b7ecc8b6
- コンパイル時に特別扱いにしてる各関数で ZEND_AST_UNPACK のチェックしてたのを一箇所にまとめた

## dstogov: Introduced ZEND_COMPILE_IGNORE_OTHER_FILES compiler option, to allow "separate" file compilation (unaffected but previously compiled files), without CG(function_table)/CG(class_table) manipulation.
- https://github.com/php/php-src/commit/fc8d6b679786cdfebc692b74cdaf4e508a916a3e
- compiler_options に ZEND_COMPILE_IGNORE_OTHER_FILES を追加
- early_binding で継承を処理する際や call_user_func() 系など、ある処理をコンパイルする際に連鎖的に別ファイルのデータを見て CG(function_table)/CG(class_table) の操作をしなくて済むようにしてるみたい？

## vhuk: Fixed bug [#76777](https://bugs.php.net/bug.php?id=76777) and added test
- https://github.com/php/php-src/commit/cf2fc66b0289dc7a34a0d9c0e67bccb8e97472bd
- ext/libxml のバグ修正
- パブリック ID がないとき、 [libxml_set_external_entity_loader()](http://php.net/manual/ja/function.libxml-set-external-entity-loader.php) のコールバックへ渡る最初の引数が null でなくなぜか未定義変数になっていた

## dstogov: Use zend_class_entry/zend_function type names instead of \_zend_class_entry/_zend_function tags.
- https://github.com/php/php-src/commit/93f9ee7217c55c23b10a5ae01df677502ac51773
- zend_class_entry/zend_function が typedef 後の型名でなくアンダースコア付きのタグを使ってたところを修正

## massimilianobraglia: Fixed bug [#75797](https://bugs.php.net/bug.php?id=75797)
- https://github.com/php/php-src/commit/2527a0fcfd949d811f7c015aa676e47a342751b8
- 非デバッグモードで [class_alias()](http://php.net/manual/ja/function.class-alias.php) を使うとメモリリークする問題の修正

## cmb69: Fix [#76778](https://bugs.php.net/bug.php?id=76778): array_reduce leaks memory if callback throws exception
- https://github.com/php/php-src/commit/70b2fca220fc27a16cc9f81f6c6da0f2a6d6d610
- [array_reduce()](http://php.net/manual/ja/function.array-reduce.php) のコールバックが例外を投げるとかで失敗した際、メモリリークする問題の修正

## oerdnj: Fix [#76767](https://bugs.php.net/bug.php?id=76767): ‘asm’ operand has impossible constraints in zend_operators.h
- https://github.com/php/php-src/commit/02b0bc8bb1f3fec949cea616f0092c3f9d8bdb4a
- gcc4.8 のインラインアセンブラに関するバグ回避で、i386 の gcc4.8 ならインラインアセンブリを無効に

## DaveRandom: Fix [#76773](https://bugs.php.net/bug.php?id=76773) - Methods with a concrete scope need to be added again
- https://github.com/php/php-src/commit/9ace33b9c5d06b869b2aec577b119b0494840931
- ある trait が 親クラスで use され、子クラスでも use された際、子クラスでのメソット定義が無視される問題の修正
- [先日の trait の修正](https://qiita.com/sj-i/items/768e9afbd71f43d13fc8#pmmaga-fix-76700---methods-with-altered-visibility-need-to-be-added-again)の regression、opcodes と可視性の他にさらに無視できる時の条件が増えた感じ

## cmb69: Increase memory_limit to prevent test failures
- https://github.com/php/php-src/commit/5fb01a3a42ec850a3d0e09247414387e8964ef44
- テストがこけないようにテストコードでメモリリミットを増やした

## cmb69: Fix [#68825](https://bugs.php.net/bug.php?id=68825): Exception in DirectoryIterator::getLinkTarget()
- https://github.com/php/php-src/commit/32a728d351aab4bac28790697cd6820a8843645f
- ext/spl で [DirectoryIterator::getLinkTarget()](http://php.net/manual/ja/splfileinfo.getlinktarget.php) が例外を投げたり投げなかったりする問題を修正

## dstogov: Change zend_lookup_class_ex() and zend_fetch_class_by_name() prototypes to accept optional lower-case class name as zend_string*, instead of zval*.
- https://github.com/php/php-src/commit/92fdf9d6292712b184bb569ad5a1aa15a65d137e
- 内部 API zend_lookup_class_ex() / zend_fetch_class_by_name() がオプショナルな lower-case のクラス名を zval で受けてたのを、zend_string で受けるよう修正

# php-src めも
- 親クラスで定義されたメソッド内の静的変数は、子クラス定義時点で親クラスでのその時の値が小クラスでの初期値として引き継がれる
    - https://github.com/php/php-src/blob/b92996bea6900cbbd58dbd447d3b5a3e69f9030e/Zend/tests/method_static_var.phpt