diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index e0e3e6e631e..f8e303a13da 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -4034,7 +4034,8 @@ static void preload_link(void) if (ce->type == ZEND_INTERNAL_CLASS) { break; } - if (!(ce->ce_flags & ZEND_ACC_LINKED)) { + if ((ce->ce_flags & (ZEND_ACC_TOP_LEVEL|ZEND_ACC_ANON_CLASS)) + && !(ce->ce_flags & ZEND_ACC_LINKED)) { zend_string *key = zend_string_tolower(ce->name); if (!(ce->ce_flags & ZEND_ACC_ANON_CLASS) && zend_hash_exists(EG(class_table), key)) { diff --git a/ext/opcache/tests/bug78937_1.phpt b/ext/opcache/tests/bug78937_1.phpt index 728efba88ca..657b306d68d 100644 --- a/ext/opcache/tests/bug78937_1.phpt +++ b/ext/opcache/tests/bug78937_1.phpt @@ -18,8 +18,6 @@ class Bar { var_dump(foo()); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 object(Bar@anonymous)#%d (0) { } diff --git a/ext/opcache/tests/bug78937_2.phpt b/ext/opcache/tests/bug78937_2.phpt index 93b9908cce2..eb359cee96b 100644 --- a/ext/opcache/tests/bug78937_2.phpt +++ b/ext/opcache/tests/bug78937_2.phpt @@ -19,8 +19,6 @@ class Bar { var_dump(foo()); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 object(Bar@anonymous)#%d (0) { } diff --git a/ext/opcache/tests/bug78937_3.phpt b/ext/opcache/tests/bug78937_3.phpt index ec83b347ebb..b17f8d0a08c 100644 --- a/ext/opcache/tests/bug78937_3.phpt +++ b/ext/opcache/tests/bug78937_3.phpt @@ -17,8 +17,6 @@ include(__DIR__ . "/preload_bug78937.inc"); var_dump(foo()); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 Fatal error: Uncaught Error: Class "Bar" not found in %spreload_bug78937.inc:3 diff --git a/ext/opcache/tests/bug78937_4.phpt b/ext/opcache/tests/bug78937_4.phpt index be68271b9a3..2598b5db9c1 100644 --- a/ext/opcache/tests/bug78937_4.phpt +++ b/ext/opcache/tests/bug78937_4.phpt @@ -19,8 +19,6 @@ bar(); var_dump(new Foo); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 object(Foo)#%d (0) { } diff --git a/ext/opcache/tests/bug78937_5.phpt b/ext/opcache/tests/bug78937_5.phpt index 865f1089ea6..dc67b904569 100644 --- a/ext/opcache/tests/bug78937_5.phpt +++ b/ext/opcache/tests/bug78937_5.phpt @@ -20,8 +20,6 @@ bar(); var_dump(new Foo); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 object(Foo)#%d (0) { } diff --git a/ext/opcache/tests/bug78937_6.phpt b/ext/opcache/tests/bug78937_6.phpt index 48ed1f12503..fe9d5176aac 100644 --- a/ext/opcache/tests/bug78937_6.phpt +++ b/ext/opcache/tests/bug78937_6.phpt @@ -18,8 +18,6 @@ bar(); var_dump(new Foo); ?> --EXPECTF-- -Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6 - Warning: Can't preload unlinked class Bar@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3 Fatal error: Uncaught Error: Class "Bar" not found in %spreload_bug78937.inc:6 diff --git a/ext/opcache/tests/preload_enum.phpt b/ext/opcache/tests/preload_enum.phpt index b899692be96..30422fd5641 100644 --- a/ext/opcache/tests/preload_enum.phpt +++ b/ext/opcache/tests/preload_enum.phpt @@ -17,9 +17,7 @@ var_dump(MyEnum::Foo); var_dump(MyEnum::Bar); ?> ---EXPECTF-- +--EXPECT-- enum(MyEnum::Bar) - -Warning: Can't preload unlinked class MyEnum2: Unknown reason in %s on line %d enum(MyEnum::Foo) enum(MyEnum::Bar)