1--TEST--
2Variance error in the presence of autoloading (5)
3--FILE--
4<?php
5
6spl_autoload_register(function($class) {
7    if ($class == 'A') {
8        class A {
9            public function method(): X {}
10        }
11        var_dump(new A);
12    } else if ($class == 'B') {
13        class B extends A {
14            public function method(): Y {}
15        }
16        var_dump(new B);
17    } else if ($class == 'X') {
18        class X {
19            public function method(Y $a) {}
20        }
21        var_dump(new X);
22    } else if ($class == 'Y') {
23        class Y extends X {
24            public function method(Z $a) {}
25        }
26        var_dump(new Y);
27    } else if ($class == 'Z') {
28        class Z extends Y {
29            public function method($a) {}
30        }
31        var_dump(new Z);
32    }
33});
34
35var_dump(new B);
36
37?>
38--EXPECTF--
39object(A)#2 (0) {
40}
41object(X)#2 (0) {
42}
43
44Warning: Declaration of Y::method(Z $a) should be compatible with X::method(Y $a) in %s on line %d
45object(Z)#2 (0) {
46}
47object(Y)#2 (0) {
48}
49object(B)#2 (0) {
50}
51object(B)#2 (0) {
52}
53