]> granicus.if.org Git - php/commitdiff
Use unmangled named in property type inheritance error
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 9 Dec 2019 07:48:33 +0000 (08:48 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 9 Dec 2019 07:48:33 +0000 (08:48 +0100)
Zend/tests/type_declarations/typed_properties_protected_inheritance_mismatch.phpt [new file with mode: 0644]
Zend/zend_inheritance.c

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 (file)
index 0000000..1f03b55
--- /dev/null
@@ -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
index 56d9e6268f62e170806d1c4bf7ebb5b34053fc6c..0dbb5b77a61de3716f22668a5132b543714d5a0f 100644 (file)
@@ -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)))