Merge branch 'PHP-8.0' into PHP-8.1

* PHP-8.0:
  Fix WeakReference uniquing is TAG_HT is used
This commit is contained in:
Nikita Popov 2021-11-03 10:06:44 +01:00
commit 66c8bf98c3
2 changed files with 3 additions and 1 deletions

View file

@ -12,6 +12,7 @@ $map2 = new WeakMap;
$map2[$obj] = 1; $map2[$obj] = 1;
$map3 = clone $map2; $map3 = clone $map2;
var_dump($ref === WeakReference::create($obj));
var_dump($ref->get(), $map, $map2, $map3); var_dump($ref->get(), $map, $map2, $map3);
unset($obj); unset($obj);
var_dump($ref->get(), $map, $map2, $map3); var_dump($ref->get(), $map, $map2, $map3);
@ -31,6 +32,7 @@ unset($obj);
?> ?>
--EXPECT-- --EXPECT--
bool(true)
object(stdClass)#1 (0) { object(stdClass)#1 (0) {
} }
object(WeakMap)#3 (1) { object(WeakMap)#3 (1) {

View file

@ -214,7 +214,7 @@ found_weakref:
} }
if (tag == ZEND_WEAKREF_TAG_HT) { if (tag == ZEND_WEAKREF_TAG_HT) {
ZEND_HASH_FOREACH(ptr, tagged_ptr) { ZEND_HASH_FOREACH_PTR(ptr, tagged_ptr) {
if (ZEND_WEAKREF_GET_TAG(tagged_ptr) == ZEND_WEAKREF_TAG_REF) { if (ZEND_WEAKREF_GET_TAG(tagged_ptr) == ZEND_WEAKREF_TAG_REF) {
ptr = ZEND_WEAKREF_GET_PTR(tagged_ptr); ptr = ZEND_WEAKREF_GET_PTR(tagged_ptr);
goto found_weakref; goto found_weakref;