1--TEST--
2Typed property on by-ref array value
3--FILE--
4<?php
5
6$a = new class {
7	public int $foo = 1;
8};
9
10$_ = [&$a->foo];
11
12$_[0] += 1;
13var_dump($a->foo);
14
15$_[0] .= "1";
16var_dump($a->foo);
17
18try {
19	$_[0] .= "e50";
20} catch (Error $e) { echo $e->getMessage(), "\n"; }
21var_dump($a->foo);
22
23$_[0]--;
24var_dump($a->foo);
25
26--$_[0];
27var_dump($a->foo);
28
29$a->foo = PHP_INT_MIN;
30
31try {
32        $_[0]--;
33} catch (Error $e) { echo $e->getMessage(), "\n"; }
34echo gettype($a->foo),"\n";
35
36try {
37	--$_[0];
38} catch (Error $e) { echo $e->getMessage(), "\n"; }
39echo gettype($a->foo),"\n";
40
41$a->foo = PHP_INT_MAX;
42
43try {
44	$_[0]++;
45} catch (Error $e) { echo $e->getMessage(), "\n"; }
46echo gettype($a->foo),"\n";
47
48try {
49	++$_[0];
50} catch (Error $e) { echo $e->getMessage(), "\n"; }
51echo gettype($a->foo),"\n";
52
53$_[0] = 0;
54try {
55	$_[0] = [];
56} catch (Error $e) { echo $e->getMessage(), "\n"; }
57var_dump($a->foo);
58
59$_[0] = 1;
60var_dump($a->foo);
61
62?>
63--EXPECT--
64int(2)
65int(21)
66Cannot assign string to reference held by property class@anonymous::$foo of type int
67int(21)
68int(20)
69int(19)
70Cannot decrement a reference held by property class@anonymous::$foo of type int past its minimal value
71integer
72Cannot decrement a reference held by property class@anonymous::$foo of type int past its minimal value
73integer
74Cannot increment a reference held by property class@anonymous::$foo of type int past its maximal value
75integer
76Cannot increment a reference held by property class@anonymous::$foo of type int past its maximal value
77integer
78Cannot assign array to reference held by property class@anonymous::$foo of type int
79int(0)
80int(1)
81