1--TEST--
2Valid union type variance
3--FILE--
4<?php
5
6class X {}
7class Y extends X {}
8
9class A {
10    public X|Y $prop;
11    public iterable $prop2;
12
13    public function method(int $a): int|float {}
14    public function method2(B|string $a): A|string {}
15    public function method3(Y|B $a): X|A {}
16    public function method4(Traversable|X $a): iterable|X {}
17}
18class B extends A {
19    public X $prop;
20    public array|Traversable $prop2;
21
22    public function method(int|float $a): int {}
23    public function method2(A|string $a): B|string {}
24    public function method3(A|X $a): B|Y {}
25    public function method4(iterable|X $a): Traversable|X {}
26}
27
28?>
29===DONE===
30--EXPECT--
31===DONE===
32