summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-08-16 12:41:45 +0200
committerNikita Popov <nikic@php.net>2016-08-16 12:43:17 +0200
commit1397f754c8b51ad879c18da85be6b8d1baf77c19 (patch)
treee4f38643eb467f8a186ef493544439bb0aaa0c14
parent443da77c3506a8fea8f22ae4b459284a0b55b512 (diff)
downloadphp-git-1397f754c8b51ad879c18da85be6b8d1baf77c19.tar.gz
Fix handling of qualified nullable parameter types
compile_typename() can't deal with TYPE_NULLABLE flags, drop it beforehand.
-rw-r--r--Zend/tests/typehints/fq_nullable.phpt13
-rw-r--r--Zend/zend_compile.c1
2 files changed, 14 insertions, 0 deletions
diff --git a/Zend/tests/typehints/fq_nullable.phpt b/Zend/tests/typehints/fq_nullable.phpt
new file mode 100644
index 0000000000..24ba2ffa62
--- /dev/null
+++ b/Zend/tests/typehints/fq_nullable.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Fully-qualified nullable parameter type
+--FILE--
+<?php
+
+namespace Foo;
+function test(?\stdClass $param) {}
+test(new \stdClass);
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index fc77c6ad2f..b61a819528 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5140,6 +5140,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
op_array->fn_flags |= ZEND_ACC_HAS_TYPE_HINTS;
arg_info->allow_null = has_null_default || is_explicitly_nullable;
+ type_ast->attr &= ~ZEND_TYPE_NULLABLE;
zend_compile_typename(type_ast, arg_info);
if (arg_info->type_hint == IS_VOID) {