summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/type_declarations/typed_properties_protected_inheritance_mismatch.phpt11
-rw-r--r--Zend/zend_inheritance.c2
2 files changed, 12 insertions, 1 deletions
diff --git a/Zend/tests/type_declarations/typed_properties_protected_inheritance_mismatch.phpt b/Zend/tests/type_declarations/typed_properties_protected_inheritance_mismatch.phpt
new file mode 100644
index 0000000000..1f03b5580f
--- /dev/null
+++ b/Zend/tests/type_declarations/typed_properties_protected_inheritance_mismatch.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Typed property invariance violation for protected properties
+--FILE--
+<?php
+
+class A { protected int $x; }
+class B extends A { protected $x; }
+
+?>
+--EXPECTF--
+Fatal error: Type of B::$x must be int (as in class A) in %s on line %d
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 56d9e6268f..0dbb5b77a6 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -936,7 +936,7 @@ static void emit_incompatible_property_error(
zend_error_noreturn(E_COMPILE_ERROR,
"Type of %s::$%s must be %s%s (as in class %s)",
ZSTR_VAL(child->ce->name),
- ZSTR_VAL(child->name),
+ zend_get_unmangled_property_name(child->name),
ZEND_TYPE_ALLOW_NULL(parent->type) ? "?" : "",
ZEND_TYPE_IS_CLASS(parent->type)
? ZSTR_VAL(ZEND_TYPE_IS_CE(parent->type) ? ZEND_TYPE_CE(parent->type)->name : resolve_class_name(parent->ce, ZEND_TYPE_NAME(parent->type)))