Don't print preload warning for non-top-level classes

Dynamically declared classes categorically do not get linked during
preloading, even if all their dependencies are known. The warning
is misleading in this case, and there isn't anything the user can
do to address it.
This commit is contained in:
Nikita Popov 2021-07-30 10:27:51 +02:00
parent b5746a4c7f
commit b1b0c81e39
8 changed files with 3 additions and 16 deletions

View File

@ -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)) {

View File

@ -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) {
}

View File

@ -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) {
}

View File

@ -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

View File

@ -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) {
}

View File

@ -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) {
}

View File

@ -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

View File

@ -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)