--- /dev/null
+--TEST--
+Bug #47343 (gc_collect_cycles causes a segfault when called within a destructor in one case)
+--FILE--
+<?php
+class A
+{
+ public function __destruct()
+ {
+ gc_collect_cycles();
+ }
+
+ public function getB()
+ {
+ $this->data['foo'] = new B($this);
+ $this->data['bar'] = new B($this);
+ // Return either of the above
+ return $this->data['foo'];
+ }
+}
+
+class B
+{
+ public function B($A)
+ {
+ $this->A = $A;
+ }
+
+ public function __destruct()
+ {
+ }
+}
+
+for ($i = 0; $i < 2; $i++)
+{
+ $Aobj = new A;
+ $Bobj = $Aobj->getB();
+ unset($Bobj);
+ unset($Aobj);
+}
+
+echo "DONE\n";
+?>
+--EXPECT--
+DONE
}
}
-#define FREE_LIST_END ((zval_gc_info*)((-1)|~GC_COLOR))
+#define FREE_LIST_END ((zval_gc_info*)(~(zend_uintptr_t)GC_COLOR))
ZEND_API int gc_collect_cycles(TSRMLS_D)
{