1--TEST--
2Observer: Retvals are observable that are: refcounted, IS_VAR
3--EXTENSIONS--
4zend_test
5--INI--
6zend_test.observer.enabled=1
7zend_test.observer.observe_all=1
8zend_test.observer.show_return_value=1
9--FILE--
10<?php
11class MyRetval {}
12
13function getObj() {
14    return new MyRetval(); // Refcounted
15}
16
17function foo() {
18    return getObj(); // IS_VAR
19}
20
21$res = foo(); // Retval used
22foo(); // Retval unused
23
24function bar($what) {
25  return 'This gets ' . $what . ' in the return handler when unused'; // Refcounted + IS_VAR
26}
27
28$res = bar('freed'); // Retval used
29bar('freed'); // Retval unused
30
31echo 'Done' . PHP_EOL;
32?>
33--EXPECTF--
34<!-- init '%s%eobserver_retval_%d.php' -->
35<file '%s%eobserver_retval_%d.php'>
36  <!-- init foo() -->
37  <foo>
38    <!-- init getObj() -->
39    <getObj>
40    </getObj:object(MyRetval)#%d>
41  </foo:object(MyRetval)#%d>
42  <foo>
43    <getObj>
44    </getObj:object(MyRetval)#%d>
45  </foo:object(MyRetval)#%d>
46  <!-- init bar() -->
47  <bar>
48  </bar:'This gets freed in the return handler when unused'>
49  <bar>
50  </bar:'This gets freed in the return handler when unused'>
51Done
52</file '%s%eobserver_retval_%d.php'>
53