1--TEST--
2Exception while loading class -- interface case
3--FILE--
4<?php
5
6spl_autoload_register(function($class) {
7    throw new Exception("Class $class does not exist");
8});
9
10class A {}
11
12// Graceful failure allowed
13for ($i = 0; $i < 2; $i++) {
14    try {
15        class B extends A implements I {
16        }
17    } catch (Exception $e) {
18        echo $e->getMessage(), "\n";
19    }
20}
21
22interface J {}
23
24spl_autoload_register(function($class) {
25    // Tie up B in a variance obligation.
26    class X {
27        public function test(): J {}
28    }
29    class Y extends X {
30        public function test(): B {}
31    }
32}, true, true);
33
34// Fallback to fatal error, as we can't unlink class B anymore.
35try {
36    class B extends A implements I, J {
37    }
38} catch (Exception $e) {
39    echo $e->getMessage(), "\n";
40}
41
42?>
43--EXPECTF--
44Class I does not exist
45Class I does not exist
46
47Fatal error: During inheritance of B with variance dependencies: Uncaught Exception: Class I does not exist in %s:%d
48Stack trace:
49#0 [internal function]: {closure}('I')
50#1 %s(%d): spl_autoload_call('I')
51#2 {main} in %s on line %d
52